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