相信學(xué)計(jì)算機(jī)的人都應(yīng)該學(xué)過不止一種程序語言,很多時(shí)候,很可能是兩種,或者三種,甚至有人4種5種,當(dāng)然,大部分人都知道它們是編譯型的或者是解釋型的,但是有多少人去了解過他們各自的優(yōu)缺點(diǎn)?我也正如那大部分人一樣,知道這是什么類型的語言,不過也很少去真正了解過它們!
那么什么是解釋型語言?什么是編譯型語言?
大家都知道,計(jì)算機(jī)是不能直接理解高級語言的,只能直接理解機(jī)器語言,所以必須要把高級語言翻譯成機(jī)器語言,計(jì)算機(jī)才能執(zhí)行高級語言編寫的程序,而翻譯的方式有兩種,一種編譯,另一種就是解釋,兩者翻譯的時(shí)間不同!
編譯型語言寫的程序在執(zhí)行之前,需要一個(gè)專門的編譯過程,把程序編譯成機(jī)器語言的文件,比如將hello.c文件進(jìn)行預(yù)處理,編譯,匯編和鏈接,最終生成可執(zhí)行代碼文件,這樣以后再次運(yùn)行的時(shí)候,就可以直接使用編譯的結(jié)果(即exe文件)!
解釋型語言不需要編譯,省了道工序,解釋型語言是在運(yùn)行程序的時(shí)候才翻譯的,需要一個(gè)專門的解釋器能夠執(zhí)行解釋型語言寫的程序,每個(gè)語句都是執(zhí)行的時(shí)候才進(jìn)行翻譯的!
編譯型語言的優(yōu)點(diǎn):
1:因?yàn)榭梢灾苯邮褂镁幾g的結(jié)果而不需要再次翻譯,所以執(zhí)行的效率是比較高的!
2:編譯程序?qū)⒃闯绦蚍g成目標(biāo)程序后保存在另一個(gè)文件中,該目標(biāo)程序可以脫離編譯程序直接在計(jì)算機(jī)上多次使用,大部分軟件產(chǎn)品都是以目標(biāo)程序形勢發(fā)行給用戶的,不僅便于直接執(zhí)行,而且又使得他人難以盜用期中的技術(shù)!
編譯型語言的缺點(diǎn):
1:編譯執(zhí)行的語言因?yàn)橐苯油珻PU的指令集打交道,具有很強(qiáng)的指令依賴性和系統(tǒng)依賴性!
2:編譯后的程序是由機(jī)器語言指令構(gòu)成的,但是使用不同硬件平臺(tái)的計(jì)算機(jī),它們的機(jī)器語言是不同的,使得便宜過的程序不 能順利從一個(gè)計(jì)算機(jī)平臺(tái)往另外一個(gè)平臺(tái)上移植,因此在不同的平臺(tái)上往往需要重新編譯甚至重寫程序,這將會(huì)耗費(fèi)大量的人力物力財(cái)力!
解釋型語言的優(yōu)點(diǎn):
1:一般情況下,只要有相應(yīng)版本的語言解釋器,解釋型語言所寫的程序可以幾乎不做任何修改地移植到其他平臺(tái)上去,這相對于編譯型語言來說,是個(gè)極大的優(yōu)勢!
2:解釋型語言所寫的程序是逐行進(jìn)行翻譯執(zhí)行命令的,因此當(dāng)語句出現(xiàn)語法問題的時(shí)候,可以立即引起程序猿的注意,而程序猿在程序開發(fā)期間就能進(jìn)行校正!
解釋型語言的缺點(diǎn):
1:解釋型語言的實(shí)現(xiàn)中,翻譯器并不產(chǎn)生目標(biāo)機(jī)器代碼,而是產(chǎn)生易于執(zhí)行的中間代碼,但是這種中間代碼與機(jī)器代碼不同,中間代碼的解釋是由軟件支持的,不能直接使用硬件,軟件解釋器通常會(huì)導(dǎo)致執(zhí)行效率較低,并且每執(zhí)行一次就得再翻譯一次,不能像編譯型語言那樣,一次編譯,任意次使用,因而效率方便沒有編譯型的高!