什么是脚本引擎?
回答
“脚本语言”和“编程语言”之间并没有硬而快的界限。 “脚本语言”的
属性往往包括:
垃圾回收的内存管理器,而无需显式地分配和释放对象
简单地执行命令的能力,没有一堆的样板代码。 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