什么是动态语言和静态语言?静态语言动态语言的区别
定义
通常我们所说的动态语言、静态语言指 动态类型语言(Dynamically Typed Language)和 静态类型语言Statically Typed Language)。
还有一个 Dynamic Programming Language (动态编程语言),静态编程语言。
动态类型语言:在运行期间检查数据的类型的语言。用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。如:Python和ruby就是典型动 态类型语言。很多脚本语言vbscrīpt,javascrīpt也是这类语言。看下面javascrīpt代码:
function add(a,b){ return a+b; } add(1,2); add('1',2); |
静态类型语言:相反静态类型语言是在运行前编译时检查类型。在写代码时,没声明一个变量必须指定类型。如:java,c#,c,c++等等。
public int add(int a,int b){
return a+b;
}
其实比较一下代码,你很快就会发现,其实区分动态静态类型语言从语法上就够了,语言语法格式基本就可确认动静态类型。
而Dynamic Programming Language (动态编程语言)指在程序运行过程中可以改变数据类型的结构,对象的函数,变量可以被修改删除。比如:javascrīpt就是这类语言,ruby, python也属于这类语言。而c++,java不属于这类语言。看javascrīpt代码:
function Person(name){ this.name=name; } Person.prototype.getName=function(){ return this.name; } var person=new Person("okok"); alert(person.getName()); person.getName=function(){return "nono"}; alert(person.getName()); |
当然静态编程语言 是运行时不可改变结构了。
网上有人说 类型检查和改变结构 是静态语言和动态语言两个区别点。基本概念上应该就这些,是我个人理解,不一定完全正确。个人感觉没必要很清晰分门类,掌握优点、特点就好了。这个话题说开根本不是我能说清楚的。总结思考一下。
有三个名词容易混淆:
- Dynamic Programming Language (动态语言或动态编程语言)
- Dynamically Typed Language (动态类型语言)
- Statically Typed Language (静态类型语言)
FantasySoft在他文章中所提到的动态语言与静态语言实际上指的就是动态类型语言与静态类型语言。
动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的 ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态 语言。
所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
而静态类型语言的类型判断是在运行前判断(如编译阶段),比如C#就是一个静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继 承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中。(idior不知道这能不能回答你对动态语言多态的疑问^_^)
这里我需要明确说明一点,那就是,是不是动态类型语言与这门语言是不是类型安全的完全不相干的,不要将它们联系在一起!
静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。动态类型 语言的优点在于方便阅读,不需要写非常多的类型相关的代码;缺点自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。顺便说一下,现在有这样一 种趋势,那就是合并动态类型与静态类型在一种语言中,这样可以在必要的时候取长补短,Boo就是一个很好的试验性例子。^_^
最后说一下Boo,Boo是一个静态类型语言,虽然用duck typing可以模拟dynamic typing,但是duck并不支持所有类型的操作替代,所以即使完全使用duck typing也不能达到dynamic typing。就像FantasySoft所述,Type Inference不是动态类型语言的特性,所以支持Type Inference不代表这门语言就是dynamically typed。
再特地为Ninputer 这个VB的fans说一下VB.NET^_^,VB.NET是dynamically typed语言。
什么是动态语言和静态语言?静态语言动态语言的区别相关推荐
- 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 动态语言,静态类型,强类型定义语言,弱类型定义语言,
1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言. 1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时 ...
- C语言学习笔记——(三)静态开辟内存和动态开辟内存
注:编码工具是CLion+Cygwin64 目录 补充知识:C语言的布尔类型--非零即true. 静态开辟内存 静态开辟内存上限测试: 静态开辟内存特点: 静态开辟内存自动开辟和自动释放测试: 动态开 ...
- C语言 | Linux下的静态链接与动态链接
1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! 前言 上一篇分享了静态链接与动态链接的实验(Windows): ...
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...
- C语言中变量的静态分配(Static)和动态分配(StackHeap)
目录 C语言中变量的静态分配(Static)和动态分配(Stack&Heap) 变量的静态分配 包含了哪些变量? 全局变量和局部变量(staic关键字) 通过一个例子进行诠释 变量的动态分配 ...
- c语言静态函数调用静态变量_C语言中的静态变量和函数
c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they cr ...
- Linux系统编程24:基础IO之在Linux下深刻理解C语言中的动静态库以及头文件和库的关系
文章目录 七:动态库和静态库 (1)什么是库 (2)静态库和动态库初步认识 A:静态库 B:动态库 C:头文件和库文件的关系 七:动态库和静态库 (1)什么是库 库就是现有的,已经写好的可复用的代码. ...
- 梓益C语言学习笔记之链表&动态内存&文件
梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...
- 64.多态性实现机制—静态分派与动态分派(方法解析、静态分派、动态分派、单分派和多分派)
64.多态性实现机制-静态分派与动态分派 64.1.方法解析 64.2.静态分派 64.3.动态分派 64.4.单分派和多分派 64.多态性实现机制--静态分派与动态分派 64.1.方法解析 Clas ...
最新文章
- Linux之sed命令
- 001_Redis介绍
- Android架构实例分析之编写hello驱动的HAL层代码
- MySQL无法启动 服务没有报告任何错误
- matplotlib 绘图代码库(自用)
- 强烈推荐asp.net数据访问的官方指南系列 (Data Access Tutorials)
- lingo与excel
- CreatePipe()函数
- java Eclipse 如何打开bin文件目录视图
- 老大,不好了,内存泄漏了!
- C# 用户自定义控件添加到工具箱
- Kotlin里的takeIf和takeUnless
- 第979期机器学习日报(2017-05-24)
- Aidlux边缘设备简介
- 首期“赛迪区块链技术与应用培训班”成功举办
- 震惊——JS中百度地图开放平台API尽然是这样使用
- PyTorch模型搭建和源码详解
- 课时12 Linux文件系统挂载管理
- 事务管理之JTA事务
- 华为手机备份的通讯录是什么文件_华为手机通讯录在哪个文件夹?怎么恢复华为手机通讯录...
热门文章
- 网络语言2019流行语C位解,2019年最新网络流行语大全及解释 2019比较火的梗口头禅...
- 查看oracle数据库服务器配置,Oracle数据库监听配置
- 复现KGAT: Knowledge Graph Attention Network for Recommendation(四)
- 操作系统 :两级页表
- matlab同名端相反变压器,读懂变压器的同名端和异名端
- Java接口和抽象类的异同
- SQL UNIQUE 约束
- 【Autopsy数字取证篇】Autopsy案例更改时区
- 催收公司怎么经营,怎么接单
- 分享几种3D建模类型:哪种最适合您的需求?