Posted on 2009-09-28 19:19
laogao 閱讀(1131)
評論(0) 編輯 收藏 所屬分類:
Programming in General
最近圍觀一本JavaScript的書籍引發(fā)的爭論,一不小心碰到一篇講編程語言類型系統(tǒng)劃分的帖子,回想起當(dāng)年還在公司內(nèi)部的Tech Session上主講過這個話題,不過只涉及到靜態(tài)/動態(tài)、強(qiáng)類型/弱類型,遠(yuǎn)沒有這位仁兄總結(jié)的那么全面。
原文鏈接
http://www.reddit.com/r/programming/comments/63tnv/bruce_eckel_33104_im_over_it_java/c02qx55
不多廢話,直入正題:
[維度一] Static vs Dynamic Typing
靜態(tài)類型和動態(tài)類型,區(qū)分的關(guān)鍵點為編譯期或運(yùn)行期確定類型:靜態(tài)類型在編譯期確定,動態(tài)類型在運(yùn)行期確定。
靜態(tài)類型代表 Java、Scala、Haskell
動態(tài)類型代表 Ruby、Python、Erlang
[維度二] Strong vs Weak Typing
強(qiáng)類型和弱類型,區(qū)分的關(guān)鍵點為運(yùn)行時是否自動轉(zhuǎn)換到與實際類型不符的類型:強(qiáng)類型要求手工類型轉(zhuǎn)換,弱類型自動轉(zhuǎn)換。
強(qiáng)類型代表 Java、Scala、Python
弱類型代表 C、Assembly、JavaScript
[維度三] Latent (Implicit) vs Manifest (Explicit) Typing
隱式類型和顯式類型,區(qū)分的關(guān)鍵點為是否要在源碼中聲明類型:隱式類型不需要,顯式類型需要。
隱式類型代表 Haskell、Erlang、Python
顯式類型代表 C、C++、Java
[維度四] Nominal vs Structural Typing
名義類型和結(jié)構(gòu)類型,區(qū)分的關(guān)鍵點為類型判定是根據(jù)標(biāo)稱還是根據(jù)內(nèi)容:名義類型根據(jù)標(biāo)稱,結(jié)構(gòu)類型根據(jù)內(nèi)容。
名義類型代表 C、C++、Java
結(jié)構(gòu)類型代表 Haskell、Erlang、Python
關(guān)于JavaScript書籍的爭論,請移步如下網(wǎng)址:
1- 網(wǎng)友Hax的"炮轟"帖
http://www.javaeye.com/topic/474725
2- 周愛民(aimingoo)的MSN空間
http://aimingoo.spaces.live.com/blog/
3- 火星常駐JE辦事處相關(guān)帖
http://mars.group.javaeye.com/group/topic/14325