定義:
編譯型語言: 在執(zhí)行前對已編寫好的程序進行一次編譯(即將代碼翻譯成機器語言).這個過程也是編程中的編譯時,根據(jù)平臺的編譯器生成一個可執(zhí)行文件,如windows下的exe, c語言下的cmd文件. 此后每次運行這些文件時 不需要進行編譯. 所以運行時效率較高. 但是跨平臺性較差. 如已編譯好的exe文件不能在mac下使用,需要重新進行編譯.靈活性也比較差, 因為編譯好的文件如果需要修改則需要重新編譯生成可執(zhí)行文件. (例外:Objective-C的運行時機制可以在運行時才修改方法和屬性 這個是靈活的) (使用編譯器進行編譯)
解釋型語言:在執(zhí)行時才將運行到的代碼翻譯成機器語言. 每執(zhí)行到一句代碼是直接編譯然后執(zhí)行. 再繼續(xù)編譯下一句代碼再繼續(xù)執(zhí)行. 這種類型的語言跨平臺型好. 因為在運行時才進行編譯. 一個文件可以在不同的平臺下的虛擬機中編譯. 如Java語言生成class文件后. 可以在windows下的JVM下運行同時在Mac的VM下運行. 這種類型效率較低因為需要每句代碼編譯一次->執(zhí)行->編譯->執(zhí)行. PHP, Javascript, Python都屬于解釋型語言. (使用翻譯器進行翻譯)
例子:
c語言是編譯型語言的經(jīng)典例子.
代碼寫好后, 需要使用編譯器生成一個cmd文件. 然后再運行cmd文件.此時如果對代碼進行修改, cmd文件的運行結(jié)果和過程不會發(fā)生改變. 任何代碼上的修改都需要重新編譯成cmd文件才能運行并看到成果.
PHP, Java是解釋型語言的例子.
代碼編寫完成后, PHP會保存為一個后綴為php的文件. Java則生成一個class文件.
在不同的平臺上. PHP會在運行時編譯每句代碼并執(zhí)行. Java也會根據(jù)不同平臺的虛擬機編譯class文件.然后再輸出結(jié)果.如果在文件中修改代碼. 馬上就能看到結(jié)果不需要重新編譯.