編譯型&解釋型、動態語言&靜態語言、強類型語言&弱類型語言

順著javascript在mdn上的定義,扒到了這么一篇文章:about JavaScript.

It is a prototype-based, multi-paradigm scripting language that is dynamic, and supports object-oriented, imperative, and functional programming styles.

實際上一開始我就知道javascript是弱類型語言,動態類型語言,解釋型語言,但其實對這幾個概念并不清晰。今日梳理如下。

動態|靜態類型語言

有三個名詞容易混淆:
Dynamic Programming Language (動態語言或動態編程語言)
Dynamically Typed Language (動態類型語言)
Statically Typed Language (靜態類型語言)
對于第一個我還并不是很理解wiki的內容。本文所指的動態靜態語言,主要指的是動態類型和靜態類型語言。
(1)動態類型語言:在運行期間(run time)才去做數據類型檢查,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言。
(2)靜態類型語言:在編譯期間(compile time)做數據類型檢查。也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表。

拋開語言的概念,單獨討論動靜態類型也很有意思。比如:Hashmap 就是動態類型 Map 就是靜態類型,因而編譯器可以將任何 map objects
視作某種類型的 Map——參考高票答案中class Foo案例

cf.:Compile:將用戶代碼轉換為機器代碼的過程。Build:生成可執行文件,Build的過程包括了Compile的過程?!?/p>

強/弱類型語言(Strong_and_weak_typing)

強弱,動靜類型是兩個概念
比如:
Python是強類型 + 動態類型
JS是弱類型 + 動態類型

弱/強類型指的是語言類型系統的類型檢測的嚴格程度。強弱類型有很多定義,甚至定義與定義之間都是相互矛盾的,所以wiki上有這樣一句話:

it is possible to defend claims about most programming languages that they are either strongly or weakly typed.

但注意隱式類型轉換也可以發生在強類型語言中。比如:

class Untitled {
    public static void main(String[] args) {
        // 運行之后可以正常在控制臺打印
        if("1"+1=="11"){System.out.println("=======");}
    }
}

實際上這是一種特殊的隱式形類型轉換。
也可以發生在 java 的 float int 等數字類型轉換中。
java中+的字符串連接操作符的特殊用法。只有在一個有字符串,一個是非字符串的時候才會發生。

靜態語言動態語言說的是類型檢測發生的階段。
動態/靜態類型,指的是聲明一個變量之后,它是否可以存儲(指向)不同類型的變量。靜態動態類型,是以類型檢測發生的階段不同進行區分的兩個proposition互為因果。
比如:正是因為類型檢測發生在編譯(預編譯)階段(一般build automatically),所以java才不允許對變量變更類型,所以它是靜態類型語言。

編譯型和解釋性語言

用編譯型語言寫的程序執行之前,需要一個專門的編譯過程,通過編譯系統(不僅僅只是通過編譯器,編譯器只是編譯系統的一部分)把高級語言翻譯成機器語言,把源高級程序編譯成為機器語言文件,比如windows下的exe文件。以后就可以直接運行而不需要編譯了,因為翻譯只做了一次,運行時不需要翻譯,所以編譯型語言的程序執行效率高,但也不能一概而論,部分解釋型語言的解釋器通過在運行時動態優化代碼,甚至能夠使解釋型語言的性能超過編譯型語言。
解釋則不同,解釋型語言編寫的程序不需要編譯。解釋型語言在運行的時候才編譯。

舉個栗子。

作為編譯型語言,JAVA程序要被統一編譯成字節碼文件——文件后綴是class。此種文件在java中又稱為類文件。java類文件不能再計算機上直接執行,它需要被java虛擬機翻譯成本地的機器碼后才能執行,而java虛擬機的翻譯過程則是解釋性的。java字節碼文件首先被加載到計算機內存中,然后讀出一條指令,翻譯一條指令,執行一條指令,該過程被稱為java語言的解釋執行,是由java虛擬機完成的。而在現實中,java開發工具JDK提供了兩個很重要的命令來完成上面的編譯和解釋(翻譯)過程。兩個命令分別是java.exe和javac.exe,前者加載java類文件,并逐步編譯為字節碼文件,而另一個命令則對應了java語言的解釋(javac.exe)過程。在次序上,java語言是要先進行編譯的過程,接著解釋執行。

但隨著硬件的升級和設計思想的變革,編譯型和解釋型語言越來越籠統,主要體現在一些新興的高級語言上,而解釋型語言的自身特點也使得編譯器廠商愿意花費更多成本來優化解釋器,解釋型語言性能超過編譯型語言也是必然的。

額外知識

任何語言都能實現另一個語言的解析器

參考文獻

解釋型語言和編譯型語言的區別
https://en.wikipedia.org/wiki/Strong_and_weak_typing
JS是動態弱類型語言的理解

延伸閱讀

boxing——類型包裹的概念

代碼在線運行工具

https://codepad.remoteinterview.io/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375