动态语言,动态类型语言与静态类型语言
转自:http://darrenzhu.iteye.com/blog/2026002?utm_source=tuicool
1.有三个名词容易混淆:
Dynamic Programming Language (动态语言或动态编程语言)
Dynamically Typed Language (动态类型语言)
Statically Typed Language (静态类型语言)
动态语言与动态类型语言
初看起来, 很容易让我们认为它们是同一个概念,毕竟它们之间就差两字:"类型", 是的就因为这两字,它们的确不是同一个概念.
动态语言
动态编程语言是高级程序设计语言的一个类别,在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被 引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。众所周知的ECMAScript(JavaScript)便是一个动态语 言,除此之外如PHP、Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。
大部分动态语言都使用动态类型,但也有些不是。
动态类型语言
所谓的动态类型语言,意思就是类型的检查是在运行时做的.
静态类型语言
类型的检查是在编译时做的. 如果一个编程语言的类型检查,可在不测试运行时期表达式的等价性的情况下进行,该语言即为静态类型的.
强类型与弱类型
类型检查所进行的检验处理以及实行类型的约束,可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器所进行语义分析中进行的。如 果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换)就称此处理为强类型,反之称为弱类型。
2.动态类型语言与弱类型语言之间的主要区别
动态类型语言的关键特征是它的类型检查的主体过程是在运行期而不是编译期.
满足这特特征的语言有很多,常用的包括:APL, Clojure, Erlang, Groovy, JavaScript, Jython, Lisp, PHP, Python, Ruby, Smalltalk和Tcl等.相对的,在编译期就进行类型检查过程的语言(如C++和Java)就是最常用的静态类型语言.
另一主要区别是动态类型语言变量无类型而变量值才有类型
想想JavaScript, 定义一个变量a, 你可以将任意类型的变量值赋值给a.
参考文章:
http://en.wikipedia.org/wiki/Dynamic_programming_language
http://en.wikipedia.org/wiki/Type_system