什么是脚本引擎?

zxc*_*bnm 10 ruby python java scripting

我在这里看到,编程语言与脚本语言的区别在于脚本引擎.但我不明白它是如何工作的,所以我不知道它的区别.

例如,我在导入库中看到Java调用方法中的代码,但它与Python或Ruby代码似乎"不够" - 两者都是脚本语言,对吧?我想这也与程序和面向对象的范例有关,但最后,我不明白为什么它们按照它们的方式进行分类.

编辑:关于作为解释器的脚本引擎... Java不是解释性语言吗?我知道有编译的字节码,但是,它对我来说没有意义.

ste*_*eha 12

"脚本语言"和"编程语言"之间没有硬性和快速的界限.

"脚本语言"的属性往往包括:

  • 垃圾收集的内存管理器,无需显式分配和释放对象

  • 能够简单地执行命令,而无需一堆样板代码.Java通常用作反例.在Python中你可以简单地说,print("Hello, world!")但是在Java中你需要更多的语法(这里的例子是七行代码).

  • 与上述相关,通常在"脚本语言"中,您不必显式声明变量,并且很少需要声明变量类型.一些脚本语言(例如Javascript)将强制放弃类型,而其他语言(例如Python)则强类型化并引发类型不匹配的异常.

  • 无需显式编译或链接步骤; 你只需编写代码并运行它.("脚本语言"仍然可以在内部进行即时编译;例如,Python就是这样做的.)

除了这些基础知识之外,"脚本语言"可以包括原始和微不足道的东西,如MS-DOS中的"批处理"语言,以及Python,Ruby等富有表现力的强大语言.

  • @hasanj,你的意思是"这不是真的"?我声称任何要求你自己"malloc()"和"free()"内存的语言都被取消了作为"脚本语言"的资格.我没有声称"非脚本语言"必须强迫你管理内存. (3认同)

Ale*_*lli 6

您基本上发现脚本语言和"非脚本"语言之间的区别非常人为.Python可以编译为JVM字节码(使用Jython),我相信Ruby也可以 - 然后运行Python或Ruby代码的"引擎"将是一个JVM,运行Java代码(或Scala)的"引擎"代码等).与.NET和IronPython(或IronRuby)类似 - 那么"引擎"就是微软的CLR,就像C#,Boo等一样.被称为"脚本"的语言通常是动态类型的...但我从未听过用于其他重要动态类型语言的术语,如Smalltalk,Mozart/OZ或Erlang ...... ;-).