什麼是腳本引擎?
回答
「腳本語言」和「編程語言」之間並沒有硬而快的界限。 「腳本語言」的
屬性往往包括:
垃圾回收的內存管理器,而無需顯式地分配和釋放對象
簡單地執行命令的能力,沒有一堆的樣板代碼。 Java通常被用作反例。在Python中,您可以簡單地說
print("Hello, world!")
,但在Java中,您需要更多的語法(示例here是七行代碼)。與上面相關,通常在「腳本語言」中,您不必顯式聲明變量,而且您很少需要聲明變量的類型。一些腳本語言(比如Javascript)會強制類型放棄,而另一些(比如Python)強類型,並且會在類型不匹配時引發異常。
不需要顯式的編譯或鏈接步驟;你只需編寫代碼並運行它。 (A「腳本語言」仍然可以剛剛在時間內編制; Python做這個,例如)
除了這些基本的「腳本語言」的範圍可以從一些原始的和瑣碎,像MS-DOS中的「批處理」語言,直至Python,Ruby等表達力強大的語言。
,除了第一點:這不是真的;我知道的唯一不是垃圾回收的語言是C/C++。 – hasen 2009-11-07 09:43:24
@hasanj,你是什麼意思「這不是真的」?我聲稱任何需要你自己'malloc()'和'free()'內存的語言都被取消爲「腳本語言」。我沒有聲稱「非腳本語言」必須強制你管理內存。 – steveha 2009-11-07 22:47:41
@hasanj,如果你看看它,你會發現很多沒有垃圾回收的語言。 FORTRAN,Pascal和C/C++都可以想到,但有很多。當我第一次瞭解它時,AWK對我來說是一件大事,因爲你甚至不必聲明列表會有多長;你可以隨時加入它!確實,許多現代語言都會進行垃圾回收,但是當「腳本語言」首次出現時,垃圾回收的缺乏就成了一件大事。請閱讀下面的「歷史概述」:http://en.wikipedia.org/wiki/Scripting_language – steveha 2009-11-08 07:34:45
也許是最接近你正在談論什麼是interpreter:
在計算機科學,口譯員 通常意味着 執行,即執行一個計算機程序,指令 用編程語言。 雖然解釋和編譯 是由 編程語言實現的兩種主要手段, 這些都不是完全不同的 類別,其中一個原因是 大多數口譯系統也 執行一些翻譯工作,只是 一樣的編譯器之一。
基本上是一個intepreter(如果你喜歡或腳本引擎)是負責在執行時轉動腳本成機器代碼(相對於它創建之前執行時間機器代碼的編譯器)的組件。
您基本上已經發現,腳本語言和「非腳本」語言之間的區別是非常人爲的。 Python可以編譯爲JVM字節碼(使用Jython),我相信Ruby也可以 - 那麼運行Python或Ruby代碼的「引擎」將成爲JVM,運行Java代碼的相同「引擎」(或Scala代碼等等)。與.NET和IronPython(或IronRuby)類似 - 那麼「引擎」就是微軟的CLR,就像C#,Boo等一樣。被稱爲「腳本」的語言通常是動態類型的......但是我從未聽說過用於其他重要動態類型語言的術語,例如Smalltalk,Mozart/OZ或Erlang ...... ;-)。
「腳本語言」可能被稱爲口語化。這個術語沒有很好的定義,你會發現關於哪些語言是腳本語言的一些不同意見。傳達語言屬性的模糊概念有時很有用(請參閱steveha's answer)。
「腳本語言」也可能指代語言的特定用法。例如,一個軟件可能會使用Lua作爲其腳本語言 - 最終用戶用來自動化(或「編寫腳本」)複雜任務的語言。
腳本/解釋語言和編譯語言之間的一個有用的區別是,您通常可以將腳本語言的解釋程序嵌入已編譯的項目中,例如遊戲引擎。
我知道你已經接受了答案,但是有一些含糊不清。
當提到腳本引擎時,我們通常指位於模板內部並生成文本輸出或文檔的小型嵌入式語言。例如Freemarker和Velocity通常被稱爲腳本引擎。 Erb也會坐在這裏,但奇怪的是經常不被稱爲腳本引擎。
甲腳本語言通常需要沒有編譯步驟,因此能夠更簡單地作爲一個運行,或者,從一個殼腳本。這包括諸如awk,perl,tcl,python,ruby等等。這些語言通常需要簡潔並且類型安全通常是可選的。 Windows支持多種語言,它的腳本主機設施。這爲Windows內的各種組件公開了腳本語言。
所以後來完全編譯語言如Java可能也會運行的字節碼和解釋,可以考慮,但問題是,有一個明確的編譯步驟,也沒有解釋(與Sun JRE反正),它提供了Java代碼的運行時可執行環境。
嵌入了其他語言(如VBA),上面的許多語言都可以嵌入。嵌入式語言也可以作爲主機應用程序的腳本引擎。
在我看來,腳本引擎解釋程序化指令,並依次指示更大的主機應用程序或系統。這些指令立即執行,不用擔心任何剩餘的指令。
許多Lisp在數據和代碼之間沒有區別,可能在運行時動態編譯。解釋,編譯和執行步驟可供Lisp程序員在程序員操作其他語言的數據時進行操作。
- 1. 什麼是CScript錯誤:腳本找不到腳本引擎「JScript」?
- 2. 什麼是Docker引擎?
- 3. 分解shell腳本;引擎蓋下發生了什麼?
- 4. 爲什麼QML引擎多次實例化相同的腳本?
- 5. 腳本引擎和混淆
- 6. FreeBSD Ant javax腳本引擎
- 7. Java 1.5腳本引擎
- 8. php搜索引擎腳本
- 9. u-boot和腳本引擎
- 10. Rails是什麼::引擎和Rails ::引擎之間::不同
- 11. 什麼是Rhino腳本引擎的生命週期和併發語義
- 12. 什麼是嵌入Java遊戲引擎的好的簡單腳本語言?
- 13. 什麼是Twig for php模板引擎?
- 14. 什麼是inkscape的幾何引擎?
- 15. 什麼是MySQL數據庫引擎?
- 16. 什麼是引擎蓋下鑄造
- 17. 什麼是最好的Actionscript3 3D引擎?
- 18. 什麼是Perl最好的XSLT引擎?
- 19. 模板引擎究竟是什麼?
- 20. js模板引擎是什麼?
- 21. 什麼是RDBMS和數據庫引擎?
- 22. 這是什麼意思?引擎錯誤還是什麼?
- 23. 基本Groovy腳本引擎設置
- 24. 基本的PHP搜索(引擎)腳本
- 25. 什麼是創建文本文件的java模板引擎/ api?
- 26. 谷歌應用引擎的本質是什麼?
- 27. Z3中的PDR引擎的「官方」版本是什麼?
- 28. 基本的搜索引擎 - 抓取下一步是什麼?
- 29. 爲什麼引擎instanceof GroovyScriptEngineImpl?
- 30. 什麼是cppia腳本?
是的,Java(和C#)的典型實現在虛擬機中運行字節碼,也就是解釋器,就像Python或Ruby的典型實現(實際上它可以是_same_解釋器;-)。正如你所注意到的那樣,這個區別是相當糟糕的。 – 2009-11-06 23:36:41
Java不是一種解釋型語言。您有一個名爲javac的編譯器和(虛擬)機器對象二進制文件,稱爲類文件。 – alphazero 2009-11-06 23:41:59
Java不被視爲解釋型語言。你編寫Java代碼,然後你有一個明確的編譯步驟,在那裏Java代碼變成字節碼。然後在Java虛擬機中解釋字節碼。通常當人們說「解釋型語言」時,他們指的是一種語言,您可以直接運行代碼而無需顯式編譯步驟。 (「解釋者」可能會使用Just-In-Time編譯作爲速度優化。)這很模糊:即使是所謂的「編譯」語言,每個人都同意的語言也可以有解釋器。 (谷歌搜索「C解釋器」!) – steveha 2009-11-06 23:54:43