天天看點

《聖殿祭司的ASP.NET4.0專家技術手冊》----2-2 靜态與動态語言的比較

本節書摘來自異步社群《聖殿祭司的asp.net4.0專家技術手冊》一書中的第2章,第2節,作者: 奚江華,譯者: 武海軍 , 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

聖殿祭司的asp.net4.0專家技術手冊

程式語言若按照類型檢查的時機來劃分,可分為:

靜态語言(statically typed languages)。

若一種程式語言的類型檢查(type checking)工作是發生在編譯時期(compile time),則稱為靜态語言。c#與java都是靜态語言代表,程式編寫時必須使用明确的類型聲明,編譯的當下,編譯程式就會進行類型檢查,且變量或對象的類型一旦聲明後,在運作時就無法任意更換類型,否則會發生exception錯誤。

動态語言(dynamically typed languages)。

若一種程式語言的類型檢查工作發生在運作時(runtime),則稱為動态語言。python、ruby、javascript、php、smalltalk、coldfusion、groovy等都是著名的動态語言,編譯程式不會事先進行類型檢查,而是在運作時才會進行。且有的語言在運作時,變量還能不斷任意更換類型,javascript就是一例。

故靜态與動态語言在類型檢查的根本出發點上是不同的,是以利弊互見,以下闡述其優缺點。

靜态語言優缺點。

f:20100708-nancy-ael010800icon項目2.tif 優點:

靜态語言因為在編譯時期就進行類型檢查,故能事先找出類型誤用或不合法的地方,達到類型安全的目的。同時程式編寫時也能得到開發工具有效支援(如visual studio的intellisense),且由于事先就确定類型,編譯程式還能進行程式的優化,靜态語言執行速度通常比動态語言快。

缺點:

因為類型檢查工作較嚴格,程式語言會花很多精力在處理類型工作上,例如類型的聲明、類型的轉換、類型的相容性等,同時也因為層層的檢查與類型轉換工作,而導緻某些程式文法冗長與編寫困難。有點像為了飛行安全,機場通關要進行十分嚴格又繁複的檢查,導緻旅客通關速度緩慢。

動态語言優缺點。

動态語言的優缺點恰恰與靜态語言相反,把對方缺點變優點,但同時也是以失去對方的優點,隻是大家各取所需,想取得的優勢不一樣罷了。

<code>- ![f:\20100708-nancy-ael010800\icon\項目2.tif{6}](/api/storage/getbykey/screenshow?key=150610230083545f6fa5)</code> 優點:

不必為了類型問題耗費太多程式代碼與時間,程式簡潔、編寫較快、文法靈活、有靈活性。相同的功能,往往用靜态語言要一堆程式,用動态語言幾行就搞定了。甚至在運作時,還能動态加入屬性與方法。

<code>- ![f:\20100708-nancy-ael010800\icon\項目2.tif{6}](/api/storage/getbykey/screenshow?key=150644ad7bd6efb5a98c)</code> 缺點:

在程式編寫時,因為類型是不确定或弱類型的關系,難以獲得ide工具的有效支援。且編譯時期不會事先進行類型檢查工作,是以可能留下不少bug,在運作時才會發生exception錯誤。且因類型檢查與轉換工作是在運作時才進行,故很難事先優化程式,執行當下會耗費許多時間進行類型檢查工作,執行速度通常較靜态語言慢。

另外,在tiobe網站剛好有靜态語言與動态語言的使用率比較圖,看上去目前靜态語言長期一直占有使用比例的優勢(因為類型安全、ide支援、優化與執行速度的關系),但動态語言卻是長期看漲(文法簡潔、生産力與靈活的關系),如圖2-1所示。在大家受夠了若幹靜态語言

《聖殿祭司的ASP.NET4.0專家技術手冊》----2-2 靜态與動态語言的比較

日趨複雜,程式員耗費不少時間與心力,隻是為應付語言或平台本身的複雜度(如j2ee的複雜,連國外j2ee專家都這麼覺得,而.net也是越來越不容易了),而非工作與生産力上面,故反思與流行的帶動下,勢必想抛掉舊包袱,遇見一個可以專注在開發樂趣與生産速度的語言。“衆裡尋她千百度,蓦然回首,那人卻在燈火闌珊處”,尋覓到心中理想的佳人,琴瑟共鳴,怎能不叫人感動呢!故ruby與python這幾年流行也不是沒有道理的。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀