25

我剛剛注意到,在Ruby的維基百科頁面中,這種語言被定義爲解釋型語言。
我明白可能在我的背景中缺少某些東西。
我一直都知道不需要編譯器的解釋型語言和編譯型語言(需要在執行程序之前編譯)之間的區別,但是描述腳本語言的特徵是什麼?
Ruby可以定義爲腳本語言嗎?

謝謝你,原諒我黑掉Ruby是一種腳本語言還是一種解釋型語言?

+0

可能的重複[是否Ruby真的是一種解釋語言,如果它的所有實現都編譯成字節碼?](http://stackoverflow.com/questions/717490/is-ruby-really-an-interpreted-language-if -all-of-its-implement-are-compile) – nawfal

回答

37

事情不只是黑色和白色。至少,他們也是大大小小,響亮而安靜,藍色和橙色,灰色和灰色,長與短,對與錯等。

解釋/編譯只是語言分類的一種方式,無論您是否將相同的語言稱爲「腳本語言」,它都完全獨立於(在無數其他事物中)。最糟糕的是,它也是一個破碎的分類:

  • 解釋型/編譯依賴於語言的實現,而不是在語言(這不只是理論,確實有很多人會爲這兩個解釋器和編譯器幾種語言存在)
  • 有一些語言實現(包括大多數Ruby實現),編譯器,但「only」編譯爲字節碼並解釋該字節碼。
  • 也有在解釋和編譯之間切換到本地代碼(JIT編譯器)的實現。

你看,現實是一個複雜的野獸;)如上所述,Ruby是經常編譯的。然後解釋該編譯的輸出,至少在某些情況下 - 還有JIT編譯的實現(Rubinius和IIRC JRuby在一段時間後編譯爲Java字節碼)。參考實現已經是很長一段時間的編譯器了,IIRC依然如此。那麼Ruby是解釋還是編譯?除非您定義它們,否則這兩個術語都沒有意義;)

但是回到問題:「腳本語言」也不是該語言的屬性,它取決於語言的使用方式 - 即語言是否被使用用於編寫腳本任務。如果您正在尋找定義,「Scripting language」上的維基百科頁面可能會有所幫助(只是不要讓它們將您與實現細節(如腳本通常會被解釋)的註釋混淆)。確實有一些使用Ruby進行腳本編寫任務的程序,並且毫無疑問有許多獨立的Ruby程序可能符合腳本(網頁抓取,系統管理等)。

所以,我想可以調用Ruby一種腳本語言。當然,這並不意味着Rails Web應用上的ruby只是一個腳本。

+0

那麼Java呢?我想我無法將其定義爲腳本語言是真的嗎?爲什麼?謝謝 –

+1

@Guiseppe:很少有人使用Java進行腳本編寫,因此通常不會將其稱爲腳本語言。當然,如果某些應用程序確實使用Java進行腳本編寫,那麼Java在這種情況下確實可以作爲腳本語言。 – delnan

+2

現在這是我在SE看到的最自命不凡的答案。他不想讓你教他生活,他只是對Ruby有個疑問...... – user832146

3

術語「腳本語言」是非常廣泛的,它可以包括解釋和編譯語言。尤其是Ruby,可能會根據我們使用的特定實現進行編譯或解釋 - 例如,JRuby被編譯爲字節碼,而CRuby(Ruby的參考實現)被解釋爲

4

是的。

詳細響應:

腳本語言通常用於控制通常不以這種語言編寫的應用程序。例如,shell腳本等可以調用任意控制檯應用程序。

Ruby是一種經常用於腳本編寫的通用動態語言。

您可以使用反斜線符號進行任意系統調用,如下所示。

`<system command>` 

也有許多優秀的紅寶石的寶石,例如WatirRAutomation自動化網絡和本地的GUI。請參閱here