編譯性語言、解釋性語言和腳本語言的區別

1、翻譯和解釋的不一樣 javascript

翻譯的方式有兩種,一個是編譯,一個是解釋。兩種方式只是翻譯的時間不一樣。編譯型語言寫的程序在被執行以前,須要一個專門的編譯過程,把程序編譯成爲機器語言的文件,好比exe文件,之後要運行的話 就不用從新翻譯了,直接使用編譯的結果就好了(exe文件),由於翻譯只作了一次,運行時不須要翻譯,因此編譯型語言的程序執行效率高。解釋則不一樣,解釋性語言的程序不須要編譯,省了道工序,解釋性語言在運行程序的時候才翻譯,好比解釋性basic語言,專門有一個解釋器可以直接執行basic程序,每一個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就要翻譯一次,效率比較低。 java

2、腳本語言 c++

 ①腳本語言(JavaScript,VBscript等)介於HTML和C,C++,Java,C#等編程語言之間 數據庫

    HTML一般用於格式化和鏈結文本。而編程語言一般用於向機器發出一系列複雜的指令。 編程

 ②腳本語言與編程語言也有不少類似地方,其函數與編程語言比較相象一些,其也涉及到變量。與編程語言之間最大的區別是編程語言的語法和規則更爲嚴格和複雜一些。


 ③與程序代碼的關係:腳本也是一種語言,其一樣由程序代碼組成. 服務器

注:腳本語言通常都有相應的腳本引擎來解釋執行。 他們通常須要解釋器才能運行。JAVASCRIPT,ASP,PHP,PERL都是腳本語言。C/C++編譯、連接後,可造成獨立執行的exe文件。 編程語言

④腳本語言是一種解釋性的語言 函數

    例如vbscript,javascript,installshield script等等,它不象c/c++等能夠編譯成二進制代碼,以可執行文件的形式存在。腳本語言不須要編譯,能夠直接用,由解釋器來負責解釋,不過每次都須要翻譯,執行速度慢。 工具

⑤腳本語言通常都是以文本形式存在,相似於一種命令

    舉個例子說,若是你創建了一個程序,叫aaa.exe,能夠打開.js爲擴展名的文件。 性能

    你爲.js文件的編寫指定了一套規則(語法),當別人編寫了.js文件後,你的程序用這種規則來理解編寫人的意圖,並做出迴應.那麼,這一套規則就是腳本語言。

編譯型與解釋型,二者各有 利弊。前者因爲程序執行速度快,同等條件下對系統要求較低,所以像開發操做系統、大型應用程序、數據庫系統等時都採用它,像C/C++、Pascal /Object Pascal(Delphi)等都是編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程 序則一般使用解釋性語言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

但隨着硬件的升級和設計思想的變革,編譯型和解釋型語言愈來愈籠統,主要體如今一些新興的高級語言上,而解釋型語言的自身特色也使得編譯器廠商願意花費更多成原本優化解釋器,解釋型語言性能超過編譯型語言也是必然的。

說到這裏,咱們有必要說一下java與C#。解釋型語言和編譯型語言的區別

      JAVA語言是一種編譯型-解釋型語言,同時具有編譯特性和解釋特性(其實,確切的說java就是解釋型語言,其所謂的編譯過程只是將.java文件編程成平臺無關的字節碼.class文件,並非向C同樣編譯成可執行的機器語言,在此請讀者注意Java中所謂的「編譯」和傳統的「編譯」的區別)。 做爲編譯型語言,JAVA程序要被統一編譯成字節碼文件——文件後綴是class。此種文件在java中又稱爲類文件。java類文件不能再計算機上直接 執行,它須要被java虛擬機翻譯成本地的機器碼後才能執行,而java虛擬機的翻譯過程則是解釋性的。java字節碼文件首先被加載到計算機內存中,然 後讀出一條指令,翻譯一條指令,執行一條指令,該過程被稱爲java語言的解釋執行,是由java虛擬機完成的。而在現實中,java開發工具JDK提供 了兩個很重要的命令來完成上面的編譯和解釋(翻譯)過程。兩個命令分別是javac.exe和java.exe,前者加載java類文件,並逐步對字節碼 文件進行編譯,而另外一個命令則對應了java語言的解釋(javac.exe)過程。在次序上,java語言是要先進行編譯的過程,接着解釋執行。
C#語言是編譯型語言,但其「編譯」過程比較特殊,具體說明以下:
   C#程序在第一次運行的時候,會依賴其.NET Frameworker平 臺,編譯成IL中間碼),而後由JIT compiler翻譯成本地的機器碼執行。從第二次在運行相同的程序,則不須要再執行以上編譯和翻譯過程,而是直接運行第一次翻譯成的機器碼。因此對於 C#來講,一般第一次運行時間會很長,但從第二次開始,程序的執行時間會快不少。
那麼,C#爲何要進行兩次「編譯」呢?其實,微軟想經過動態編譯(由JIT compiler工具實現)來實現其程序運行的最優化。若是代碼在運行前進行動態編譯運行,那麼JIT compiler能夠很智能的根據你本地機器的硬件條件來進行優化,好比使用更好的register,機器指令等等,而不是像原來那樣,build一份程序針對全部硬件的機器跑,沒有充分利用各個機器的條件。
   另外,還有咱們常常用到的腳本語言,好比JavaScript、Shell等語言都是腳本語言,本質上來講,腳本語言就是解釋型語言。
相關文章
相關標籤/搜索