這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
電腦本質上來講就是可以運行一系列命令的機器,比如電燈擁有開和關的兩個命令,電腦相比電燈要更加複雜一些罷了。
程式設計語言就是控制電腦的命令,好比電燈開我們就用數字1來表示,關我們就是用數字0來表示。可是對人類的自然語言來說01這樣的命令實在太複雜了。如果我想讓電腦進行加減乘除的計算可能就需要輸入一串根本看不懂的01組合。好在後來發明了組合語言。
組合語言
組合語言讓我們可以使用字母符號來給電腦發送指令。比如:
操作:寄存器BX的內容送到AX中
1000100111011000 機器指令mov ax,bx 彙編指令
彙編是直接面向CPU的程式設計語言,如果我們想要開發更進階的程式使用組合語言可能就費勁了。這時候靜態類型的語言就出現了。
靜態語言
我們所謂的靜態語言是什嗎?比如C語言這樣的語言,我們可以通過英文進行邏輯編寫和資料處理,這些英文代碼通過C語言的編譯器編譯成01這種機器語言,讓其可以在電腦上運行。區別就在於,我們可以儘可能的使用人類的自然語言去編寫程式,然後通過編譯器翻譯成機器所能看懂的語言就可以了。除了C語言意外還有諸如c++,java,golang,erlang這樣的靜態類型語言,他們不盡相同,又各具特色。以上的靜態類型語言不好評判好壞的區分,主要區別還是在於編譯器的優劣,以及在不同應用情境下的表現。
靜態語言也有自身的問題,文法複雜,每次測試都需要編譯,開發效率底下,況且現在電腦硬體空前發達我們幾乎不需要手動去操作記憶體了。所以這時候動態類語言就顯現出來了。
動態語言
動態語言就是在程式啟動並執行時候將代碼編譯成機器可以啟動並執行程式,好處就是不用花時間編譯。馬上就能看到結果。諸如php,python,JavaScript這種都是動態類型語言。因為動態類型語言涉及到運行時才編譯成機器可以啟動並執行程式,顯然沒有靜態類語言直接編譯成機器碼啟動並執行速度快。
關於密集計算和密集IO
如果涉及到密集計算的業務,比如處理大量資料,顯然使用靜態類型的語言是更好的選擇,因為我們希望CPU或者GPU這些計算裝置可以以更快的形式進行運算。
如果涉及到密集IO的業務,比如網站的C10K問題,其實靜態語言和動態語言區別不大,因為這種業務類型最關鍵的問題在於IO效率而不是計算瓶頸,讓機器在單位時間內進行更多的IO操作才是關鍵。為此還要涉及一些進程,線程和協程的知識了。