【編程語言】靜態語言與動態語言的本質區別以及其應用場景

 從宏觀的語言層面來說,編程語言類型共分爲兩大類:靜態語言(又叫強類型語言)與動態語言(又叫弱類型語言)。靜態語言通常是低級(底層)語言,動態語言一般爲高級(應用)語言,靜態語言運用通常是通過編譯器,而動態語言解釋器。

 動態語言

動態語言即腳本語言又叫弱類型語言(嚴格的來說不算編程語言),依靠解釋器解釋運行(解釋器不會做任何的代碼優化的),每次運行每次解析。這樣編譯運行機制,讓其在運行效率上與靜態語言相比會差一大截,毫不避諱的說動態腳本語言在性能上與靜態編程語言相比,望塵莫及,畢竟是低級語言vs高級語言,動態語言在性能上絲毫不佔任何優勢

但(重點來,敲黑板),動態語言其自身定位和設計之初就不是追求極致性能的(如果是這樣的話動態語言也沒必要出現了),動態語言就是爲彌補靜態編程語言的缺陷而生的,它的特性和靜態語言剛好相反:方便快捷無需編譯解釋運行(方便調試,節省時間)、所見即得的代碼邏輯、靜態語言無可比擬的超高的開發效率(重點,核心競爭力,腳本語言的特點之一)、變量無需預先定義/無需聲明數據類型即可使用、變量可隨着程序的運行動態改變數據類型。

優點:

  • 方便快捷無需編譯解釋運行(方便調試,節省時間)
  • 開發效率高、開發週期短、試錯成本低,動態語言可快速試錯,產品可快速迭代(天下武功唯不快不破),無懼需求變化(真的不怕麼?相對靜態語言來說好太多,畢竟開發高)
  • 所見即得的代碼邏輯、
  • 相對靜態語言,入門簡單,學習容易,上手快
  • 據說,對公司來說性價比很高(phper):價格實惠、從業者衆多,適合當下急功近利的中國國情(這也算是優點嗎?也許吧)
  • 自動垃圾回收

  • 成本低,投入小,見效快

缺點:

  •  性能軟肋,每次運行都需要解釋器去解釋(弱類型動態語言永遠的痛)
  • 大型項目中有點心有餘而力不足
  • 相對靜態語言代碼不規範
  • 無編譯器優化、在大型項目架構上沒有較爲成熟的解決方案、大型項目是短板
  • .debug相對靜態語言來說較困難
  • 無法常駐內存,絕大部分動態語言是無法常駐內存的,雖然個別語言可以通過某些奇技淫巧實現常駐內存,但仍是雞肋。

應用場景:適合項目初期、孵化階段,可快速迭代成型,快速上線搶佔市場先機、適合對性能要求不是特別高的的業務場景、適用於中小型項目、配合其他語言做些輔助性工作、相對來說適合i/o頻繁的,不適合cpu計算密集型的

動態語言有哪些:python、php、perl、js、asp....

 

 靜態語言

靜態語言的概念是相比較動態語言的特性產生的概念。

靜態語言通常爲底層/(低級)語言,如c/c++,靜態語言性能強悍,運行穩定,編譯運行,編譯器會先優化代碼,然後再編譯,所以即使你代碼寫的很爛也關係不大: ),使用變量需要預先聲明變量和變量數據類型,強類型語言,代碼相對規範,有時候還需要手動回收垃圾和時刻注意指針,否則就指針溢出:object null。

當然了,還一個奇怪的語言類型,它似乎既擁有靜態語言的特性又具備動態語言的特點——java。沒錯就是java。java是先編譯後解釋,先編譯成字節碼然後再由jvm解釋運行,java屬於半編譯式語言,嚴格來說java是靜態語言,因爲其變量數據類型是強類型,使用變量之前也需要預先定義,編譯的時候也會有代碼優化,據說.net平臺c#編譯器優化的相當厲害。

這裏區分的一點是安卓開發所用的java和運行在vm上的java是不一樣的,Android studio將java代碼編譯後運行的,不存在解釋運行,可以看作是谷歌只是用了java的語法,而底層運用、編譯、優化都完全和jvm上的java八杆子打不着、牛馬不相及。

 優點

  • 靜態編譯型語言性能強悍、運行穩定,一次編譯即可到處運行,後面直接運行編譯生成的二進制文件。
  • 編譯器會優化代碼
  • 代碼相對規範
  • debug相對動態語言較容易
  • 能hold的住大型項目和架構。
  • 更能充分利用、發揮硬件性能

  缺點:

  • 開發效率低週期長
  •  需要格外注意變量的類型、過多的類型聲明會增加更多的代碼
  •  相對動態語言來說語法羅嗦冗長(尤其是java,像是在寫英文句子)
  •  開發小功能上不夠靈活,有點死板。
  • 不適合小項目
  • 成本高,投入大,見效相對動態語言來說較慢

應用場景:中大型項目和高併發場景,或大型軟件核心場景、核心業務場景,適合要求性能苛刻、低延遲高響應的應用場景,比較適合項目後期階段,業務成熟,項目已經穩定運營了。

靜態語言有哪些:c、c++、java、go、c#、.net...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章