Posted on 2009-09-28 19:19
laogao 閱讀(1131)
評論(0) 編輯 收藏 所屬分類:
Programming in General
最近圍觀一本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