您的位置:首页 > 其它

[澄清] 动态语言静态语言 (收藏)

2005-08-04 00:08 260 查看
FantasySoft的《也说Type Inference》后有感,觉得有必要澄清一些术语。
有三个名词容易混淆:
Dynamic Programming Language (动态语言或动态编程语言)
Dynamically Typed Language (动态类型语言)
Statically Typed Language (静态类型语言)
FantasySoft在他文章中所提到的动态语言与静态语言实际上指的就是动态类型语言与静态类型语言。
动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。
所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):


def sum(a, b):


return a + b


而静态类型语言的类型判断是在运行前判断(如编译阶段),比如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语言。
参考
http://en.wikipedia.org/wiki/Dynamically_typed_language
http://en.wikipedia.org/wiki/Dynamic_programming_language

Feedback

# re: [澄清] 动态语言静态语言

2005-08-03 11:13 by idior 以前一直以为动态类型语言是动态语言.
不知道通常意义上的Dynamic Language是指哪个? 我感觉Dynamic Language有点泛指动态类型的意思.

# re: [澄清] 动态语言静态语言

2005-08-03 11:39 by Cavingdeep @idior
这个我也不太清楚,不过我建议正确使用术语,最好直接引用英文。^_^

# re: [澄清] 动态语言静态语言

2005-08-03 13:14 by Ninputer 可以把动态类型和动态结构都作为静态语言和动态语言之间的差异点吧。动态语言之间也存在动态程度的差异不是吗。
Fortran->C->C++>C#->VB->Perl->JScript->Boo/Python->Lisp

从纯静态到高度动态,每个级别都有。

# re: [澄清] 动态语言静态语言

2005-08-03 16:40 by FantasySoft To Cavingdeep:我写那篇Post的本意也是想说一下动态类型语言跟静态类型语言的。个人觉得,常用的确实是动态类型语言和静态类型语言。但是动态语言这样的术语是不是也是指动态类型语言呢? 毕竟语言的动态还是体现在类型上吧。

BTW:您上一篇post中举的那个说明Type inference的例子容易给人造成误会。因为那个例子中在执行中抛出exception,正好体现了Boo的静态性。所以我就写了自己那篇post来跟您的遥相呼应了。呵呵~~~

To Ninputer:我觉得应该这样排: Boo->JScript->Python
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: