首先什么是編譯型語言和解釋型語言?
計算機是不能理解高級語言的,更不能直接執行高級語言,它只能直接理解機器語言,所以使用任何高級語言編寫的程序若想被計算機運行,都必須將其轉換成計算機語言,也就是機器碼。
計算機是不能理解高級語言的,更不能直接執行高級語言,它只能直接理解機器語言,所以使用任何高級語言編寫的程序若想被計算機運行,都必須將其轉換成計算機語言,也就是機器碼。而這種轉換的方式有兩種:
1.編譯
2.解釋
由此高級語言也分為編譯型語言和解釋型語言。
主要區別在于,前者源程序編譯后即可在該平臺運行,后者是在運行期間才編譯。所以前者運行速度快,后者跨平臺性好。
編譯型語言使用專門的編譯器,針對特定的平臺,將高級語言源代碼一次性的編譯成可被該平臺硬件執行的機器碼,并包裝成該平臺所能識別的可執行性程序的格式。
特點在編譯型語言寫的程序執行之前,需要一個專門的編譯過程,把源代碼編譯成機器語言的文件,如exe格式的文件,以后要再運行時,直接使用編譯結果即可,如直接運行exe文件。因為只需編譯一次,以后運行時不需要編譯,所以編譯型語言執行效率高。
總結1.一次性的編譯成平臺相關的機器語言文件,運行時脫離開發環境,運行效率高;
2.與特定平臺相關,一般無法移植到其他平臺;
3.現有的C、C++、Objective等都屬于編譯型語言。
解釋型語言使用專門的解釋器對源程序逐行解釋成特定平臺的機器碼并立即執行。是代碼在執行時才被解釋器一行行動態翻譯和執行,而不是在執行之前就完成翻譯。
特點解釋型語言不需要事先編譯,其直接將源代碼解釋成機器碼并立即執行,所以只要某一平臺提供了相應的解釋器即可運行該程序。
總結1.解釋型語言每次運行都需要將源代碼解釋稱機器碼并執行,效率較低;
2.只要平臺提供相應的解釋器,就可以運行源代碼,所以可以方便源程序移植;
3.Python等屬于解釋型語言。
編譯型與解釋型,兩者各有利弊前者由于程序執行速度快,同等條件下對系統要求較低,因此像開發操作系統、大型應用程序、數據庫系統等時都采用它,像C/C++、Pascal/ObjectPascal(Delphi)等都是編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不同系統平臺間的兼容性有一定要求的程序則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB等等。
關于javaJava和其他的語言不太一樣。因為java針對不同的平臺有不同的JVM,實現了跨平臺。所以Java語言有一次編譯到處運行的說法。
1.你可以說它是編譯型的:因為所有的Java代碼都是要編譯的,.java不經過編譯就什么用都沒有。
2.你可以說它是解釋型的:因為java代碼編譯后不能直接運行,它是解釋運行在JVM上的,所以它是解釋運行的,那也就算是解釋的了。
3.但是,現在的JVM為了效率,都有一些JIT優化。它又會把.class的二進制代碼編譯為本地的代碼直接運行,所以,又是編譯的。
個人認為,java是解釋型的語言,因為雖然java也需要編譯,編譯成.class文件,但是并不是機器可以識別的語言,而是字節碼,最終還是需要jvm的解釋,才能在各個平臺執行,這同時也是java跨平臺的原因。所以可是說java即是編譯型的,也是解釋型,但是假如非要歸類的話,從概念上的定義,恐怕java應該歸到解釋型的語言中。
編譯型的語言包括:C、C++、Delphi、Pascal、Fortran
解釋型的語言包括:Java、Basic、javascript、python