关于编程语言的typing(一些基本概念)
from:http://www.blogjava.net/sean/archive/2009/09/28/296825.html
最近围观一本JavaScript的书籍引发的争论,一不小心碰到一篇讲编程语言类型系统划分的帖子,回想起当年还在公司内部的Tech Session上主讲过这个话题,不过只涉及到静态/动态、强类型/弱类型,远没有这位仁兄总结的那么全面。
原文链接
http://www.reddit.com/r/programming/comments/63tnv/bruce_eckel_33104_im_over_it_java/c02qx55
不多废话,直入正题:
[维度一] Static vs Dynamic Typing
静态类型和动态类型,区分的关键点为编译期或运行期确定类型:静态类型在编译期确定,动态类型在运行期确定。
静态类型代表 Java、Scala、Haskell
动态类型代表 Ruby、Python、Erlang
[维度二] Strong vs Weak Typing
强类型和弱类型,区分的关键点为运行时是否自动转换到与实际类型不符的类型:强类型要求手工类型转换,弱类型自动转换。
强类型代表 Java、Scala、Python
弱类型代表 C、Assembly、JavaScript
[维度三] Latent (Implicit) vs Manifest (Explicit) Typing
隐式类型和显式类型,区分的关键点为是否要在源码中声明类型:隐式类型不需要,显式类型需要。
隐式类型代表 Haskell、Erlang、Python
显式类型代表 C、C++、Java
[维度四] Nominal vs Structural Typing
名义类型和结构类型,区分的关键点为类型判定是根据标称还是根据内容:名义类型根据标称,结构类型根据内容。
名义类型代表 C、C++、Java
结构类型代表 Haskell、Erlang、Python
关于JavaScript书籍的争论,请移步如下网址:
1- 网友Hax的”炮轰”帖 http://www.javaeye.com/topic/474725
2- 周爱民(aimingoo)的MSN空间 http://aimingoo.spaces.live.com/blog/
3- 火星常驻JE办事处相关帖 http://mars.group.javaeye.com/group/topic/14325