首先什么是編譯型語言和解釋型語言?
? ? ? ?計(jì)算機(jī)是不能理解高級(jí)語言的,更不能直接執(zhí)行高級(jí)語言,它只能直接理解機(jī)器語言,所以使用任何高級(jí)語言編寫的程序若想被計(jì)算機(jī)運(yùn)行,都必須將其轉(zhuǎn)換成計(jì)算機(jī)語言,也就是機(jī)器碼。
? ? ? ?計(jì)算機(jī)是不能理解高級(jí)語言的,更不能直接執(zhí)行高級(jí)語言,它只能直接理解機(jī)器語言,所以使用任何高級(jí)語言編寫的程序若想被計(jì)算機(jī)運(yùn)行,都必須將其轉(zhuǎn)換成計(jì)算機(jī)語言,也就是機(jī)器碼。而這種轉(zhuǎn)換的方式有兩種:
1.編譯
2.解釋
由此高級(jí)語言也分為編譯型語言和解釋型語言。
主要區(qū)別在于,前者源程序編譯后即可在該平臺(tái)運(yùn)行,后者是在運(yùn)行期間才編譯。所以前者運(yùn)行速度快,后者跨平臺(tái)性好。
編譯型語言
? ? ? ?使用專門的編譯器,針對(duì)特定的平臺(tái),將高級(jí)語言源代碼一次性的編譯成可被該平臺(tái)硬件執(zhí)行的機(jī)器碼,并包裝成該平臺(tái)所能識(shí)別的可執(zhí)行性程序的格式。
特點(diǎn)
? ? ? ?在編譯型語言寫的程序執(zhí)行之前,需要一個(gè)專門的編譯過程,把源代碼編譯成機(jī)器語言的文件,如exe格式的文件,以后要再運(yùn)行時(shí),直接使用編譯結(jié)果即可,如直接運(yùn)行exe文件。因?yàn)橹恍杈幾g一次,以后運(yùn)行時(shí)不需要編譯,所以編譯型語言執(zhí)行效率高。
總結(jié)
1.一次性的編譯成平臺(tái)相關(guān)的機(jī)器語言文件,運(yùn)行時(shí)脫離開發(fā)環(huán)境,運(yùn)行效率高;
2.與特定平臺(tái)相關(guān),一般無法移植到其他平臺(tái);
3.現(xiàn)有的C、C++、Objective等都屬于編譯型語言。
解釋型語言
使用專門的解釋器對(duì)源程序逐行解釋成特定平臺(tái)的機(jī)器碼并立即執(zhí)行。是代碼在執(zhí)行時(shí)才被解釋器一行行動(dòng)態(tài)翻譯和執(zhí)行,而不是在執(zhí)行之前就完成翻譯。
特點(diǎn)
解釋型語言不需要事先編譯,其直接將源代碼解釋成機(jī)器碼并立即執(zhí)行,所以只要某一平臺(tái)提供了相應(yīng)的解釋器即可運(yùn)行該程序。
總結(jié)
1.解釋型語言每次運(yùn)行都需要將源代碼解釋稱機(jī)器碼并執(zhí)行,效率較低;
2.只要平臺(tái)提供相應(yīng)的解釋器,就可以運(yùn)行源代碼,所以可以方便源程序移植;
3.Python等屬于解釋型語言。
編譯型與解釋型,兩者各有利弊
前者由于程序執(zhí)行速度快,同等條件下對(duì)系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫系統(tǒng)等時(shí)都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語言,而一些網(wǎng)頁腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對(duì)速度要求不高、對(duì)不同系統(tǒng)平臺(tái)間的兼容性有一定要求的程序則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
關(guān)于java
Java和其他的語言不太一樣。因?yàn)閖ava針對(duì)不同的平臺(tái)有不同的JVM,實(shí)現(xiàn)了跨平臺(tái)。所以Java語言有一次編譯到處運(yùn)行的說法。
1.你可以說它是編譯型的:因?yàn)樗械腏ava代碼都是要編譯的,.java不經(jīng)過編譯就什么用都沒有。?
2.你可以說它是解釋型的:因?yàn)閖ava代碼編譯后不能直接運(yùn)行,它是解釋運(yùn)行在JVM上的,所以它是解釋運(yùn)行的,那也就算是解釋的了。?
3.但是,現(xiàn)在的JVM為了效率,都有一些JIT優(yōu)化。它又會(huì)把.class的二進(jìn)制代碼編譯為本地的代碼直接運(yùn)行,所以,又是編譯的。
個(gè)人認(rèn)為,java是解釋型的語言,因?yàn)殡m然java也需要編譯,編譯成.class文件,但是并不是機(jī)器可以識(shí)別的語言,而是字節(jié)碼,最終還是需要 jvm的解釋,才能在各個(gè)平臺(tái)執(zhí)行,這同時(shí)也是java跨平臺(tái)的原因。所以可是說java即是編譯型的,也是解釋型,但是假如非要?dú)w類的話,從概念上的定義,恐怕java應(yīng)該歸到解釋型的語言中。?
編譯型的語言包括:C、C++、Delphi、Pascal、Fortran?
解釋型的語言包括:Java、Basic、javascript、python
在原文的基礎(chǔ)上做了一些補(bǔ)充。
轉(zhuǎn)載原文:https://blog.csdn.net/u012184539/article/details/81348780
和:https://www.cnblogs.com/zjushuiping/archive/2013/01/06/2848478.html?