計(jì)算機(jī)本質(zhì)上來講就是可以運(yùn)行一系列命令的機(jī)器唯笙,比如電燈擁有開和關(guān)的兩個(gè)命令甜滨,計(jì)算機(jī)相比電燈要更加復(fù)雜一些罷了。
編程語言就是控制計(jì)算機(jī)的命令杏慰,好比電燈開我們就用數(shù)字1來表示主卫,關(guān)我們就是用數(shù)字0來表示完域。可是對人類的自然語言來說01這樣的命令實(shí)在太復(fù)雜了。如果我想讓計(jì)算機(jī)進(jìn)行加減乘除的計(jì)算可能就需要輸入一串根本看不懂的01組合。好在后來發(fā)明了匯編語言吮蛹。
匯編語言
匯編語言讓我們可以使用字母符號來給計(jì)算機(jī)發(fā)送指令。比如:
操作:寄存器BX的內(nèi)容送到AX中
1000100111011000 機(jī)器指令
mov ax,bx 匯編指令
匯編是直接面向CPU的程序設(shè)計(jì)語言每篷,如果我們想要開發(fā)更高級的程序使用匯編語言可能就費(fèi)勁了舱权。這時(shí)候靜態(tài)類型的語言就出現(xiàn)了喧兄。
靜態(tài)語言
我們所謂的靜態(tài)語言是什么浑彰?比如C語言這樣的語言涯保,我們可以通過英文進(jìn)行邏輯編寫和數(shù)據(jù)處理未荒,這些英文代碼通過C語言的編譯器編譯成01這種機(jī)器語言速侈,讓其可以在計(jì)算機(jī)上運(yùn)行。區(qū)別就在于倚搬,我們可以盡可能的使用人類的自然語言去編寫程序冶共,然后通過編譯器翻譯成機(jī)器所能看懂的語言就可以了。除了C語言意外還有諸如c++每界,java捅僵,golang,erlang這樣的靜態(tài)類型語言盆犁,他們不盡相同命咐,又各具特色篡九。以上的靜態(tài)類型語言不好評判好壞的區(qū)分谐岁,主要區(qū)別還是在于編譯器的優(yōu)劣,以及在不同應(yīng)用場景下的表現(xiàn)榛臼。
靜態(tài)語言也有自身的問題伊佃,語法復(fù)雜,每次測試都需要編譯沛善,開發(fā)效率底下航揉,況且現(xiàn)在計(jì)算機(jī)硬件空前發(fā)達(dá)我們幾乎不需要手動去操作內(nèi)存了。所以這時(shí)候動態(tài)類語言就顯現(xiàn)出來了金刁。
動態(tài)語言
動態(tài)語言就是在程序運(yùn)行的時(shí)候?qū)⒋a編譯成機(jī)器可以運(yùn)行的程序帅涂,好處就是不用花時(shí)間編譯议薪。馬上就能看到結(jié)果。諸如php媳友,python斯议,JavaScript這種都是動態(tài)類型語言。因?yàn)閯討B(tài)類型語言涉及到運(yùn)行時(shí)才編譯成機(jī)器可以運(yùn)行的程序醇锚,顯然沒有靜態(tài)類語言直接編譯成機(jī)器碼運(yùn)行的速度快哼御。
關(guān)于密集計(jì)算和密集IO
如果涉及到密集計(jì)算的業(yè)務(wù),比如處理大量數(shù)據(jù)焊唬,顯然使用靜態(tài)類型的語言是更好的選擇恋昼,因?yàn)槲覀兿M鸆PU或者GPU這些計(jì)算設(shè)備可以以更快的形式進(jìn)行運(yùn)算。
如果涉及到密集IO的業(yè)務(wù)赶促,比如網(wǎng)站的C10K問題液肌,其實(shí)靜態(tài)語言和動態(tài)語言區(qū)別不大,因?yàn)檫@種業(yè)務(wù)類型最關(guān)鍵的問題在于IO效率而不是計(jì)算瓶頸鸥滨,讓機(jī)器在單位時(shí)間內(nèi)進(jìn)行更多的IO操作才是關(guān)鍵矩屁。為此還要涉及一些進(jìn)程,線程和協(xié)程的知識了爵赵。