首先腳本語言,之前雖然一直嘴上說腳本語言但是對他並沒有一個很清楚的概念。然后在網上查了一下也問了一下師傅劉哥,腳本語言開始就是用來“批量式”的執行命令。你在一個文件里把命令都寫進去,然后執行這個文件。可是不久人們就發現,這些命令行其實可以用更加聰明的方法構造,比如定義一些變量,或者根據系統類型的不同執行不同的命令。於是,人們為這腳本語言加入了變量,條件語句,數組,等等構造。“腳本語言”就這樣產生了。也就是說腳本語言有很多種,本來設計他的目的是為了以一種規范的方式解決某種問題,而后逐漸壯大發展成為一門語言。現在腳本語言有很多 ruby pyson lisp 還有php也是腳本語言等等。腳本程序相對一般程序開發來說比較接近自然語言,可以不經編譯而是解釋執行,利於快速開發或一些輕量的控制。
說到編譯和解釋,軟件語言有好多分類。編譯型語言和解釋型語言也是其中一個分類。
編譯型語言:編譯型語言寫的程序執行之前,需要一個專門的編譯過程,把程序編譯成機器語言文件;比如,exe文件,以后運行的話就不用重新編譯了,直接使用 編譯的結果就行了;因為翻譯只做了一次,運行時不需要翻譯,所以編譯型語言的程序執行效率高!(專門編譯,然后執行直接用)(效率高)
解釋型語言:解釋型語言的程序不需要編譯,省了道工序,解釋型語言在運行程序的時候才翻譯,比如解釋型basic語言,專門有一個解釋器能夠直接執行 basic程序,每個語句都是執行的時候才翻譯;這樣解釋型語言每執行一次就要翻譯一次,效率比較低;(運行程序時才翻譯,每執行一次,就要翻譯一次) (效率低)。但是解釋型語言跨平台性比較好,因為他依賴解釋器,只要裝解釋器程序配好環境程序就好用。當然跨平台性和編譯解釋並沒有直接的聯系。比如java是通過JVM來實現跨平台,所有的java程序不需要再編譯就可跨平台運行;C程序也可以跨平台,但是需要各種平台的開發包和編譯器來支持;PHP、Python、Perl等腳本語言不需要各平台的編譯器,但是需要先安裝在各個平台上的運行環境以及相應的package才能保證程序的跨平台特性等等。
java並不是嚴格的編譯型語言或是解釋型語言,我倒是更願意說他是編譯解釋型語言。java語言既要編譯,又要解釋;通過編譯器,把java程序翻譯成一種中間代碼——字節碼(不是機器碼),然后通過JVM解釋成相應平台的語言(JIT、AOT也是屬於java的編譯過程);所以java的跨平台性我感覺相對於c或c++的“源碼級”跨平台。(本來就是存在針對linux、windows的不同的編譯器。)是更加可行的。如果你的程序只使用C標准的輸入輸出,那么源代碼也是跨平台的,只要用對應平台的編譯器編譯就可以運行,如果你使用 了平台專有的API,那么就不能跨平台,比如WINDOWS窗口程序,就調用了WINDOWS的創建窗口,顯示窗口等API(這些調用並不一定在你自己的 代碼中),linux是沒有這些API的,所以就無法編譯運行。
對於我們使用者來說語言只是工具,我們更有必要做的只是了解這些語言然后看我們具體的需求,包括我們本身掌握的技能或是我們團隊對所選用的語言的掌握程度。然后在一個具體的業務需求下我們才可以說哪種語言更加合適。