Ruby是一种脚本语言还是解释语言?

32

我刚刚注意到维基百科页面中将Ruby定义为解释语言。
我明白可能是我的背景知识有所欠缺。
我一直知道解释语言和编译语言之间的区别,但是什么是脚本语言呢?
Ruby可以被定义为脚本语言吗?

谢谢,对于我的错误请谅解。


3个回答

50

事情并不是非黑即白的。至少,它们也可以是大和小、响亮和安静、蓝色和橙色、灰色和灰色、长和短、对和错等。

解释/编译只是一种分类语言的方式,完全独立于(数不胜数的其他事物之一)是否称同一种语言为“脚本语言”等。更重要的是,这是一种错误的分类:

  • 解释/编译取决于语言实现,而不是语言本身(这不仅是理论,确实存在许多既有解释器又有编译器的语言)
  • 有语言实现(包括大多数 Ruby 实现),它们是编译器,但“只”编译成字节码并解释该字节码。
  • 还有一些实现会在解释和编译成本地代码之间切换(JIT 编译器)。

你看,现实是一个复杂的东西 ;) 如上所述,Ruby 经常被编译。然后,在某些情况下,编译的输出被解释。还有一些实现采用 JIT 编译(Rubinius,我记得 JRuby 也在一段时间后编译成 Java 字节码)。参考实现长期以来一直是编译器,我记得现在仍然是。那么 Ruby 是解释还是编译?除非你定义它,否则这两个术语都没有意义 ;)

但回到问题本身:"脚本语言"也不是语言的属性,它取决于语言的使用方式 - 即语言是否用于脚本任务。如果你正在寻找定义,维基百科关于 "脚本语言" 的页面可能会有所帮助(只要不让它们用实现细节的注释混淆你,比如脚本通常是解释性的)。确实有一些程序使用Ruby来执行脚本任务,而且无疑有许多独立的Ruby程序可能符合脚本的资格(如网页抓取、系统管理等)。
所以,是的,我想可以称Ruby为脚本语言。当然,这并不意味着一个ruby on rails网站应用只是一个脚本。

那么Java呢?我猜我不能把它定义为脚本语言,这是真的吗?为什么?谢谢。 - Giuseppe Di Federico
2
@Guiseppe:嗯,很少有人使用Java进行脚本编写,因此通常不会将其称为脚本语言。当然,如果某些应用程序确实使用Java进行脚本编写,则在该上下文中Java可能确实符合脚本语言的定义。 - user395760
4
这是我在SE看到过的最自命不凡的回答。他并不想让你教他人生,他只是有一个关于Ruby的问题... - user832146

5

可以。

详细回答:

脚本语言通常用于控制通常不用此语言编写的应用程序。例如,shell脚本等可以调用任意控制台应用程序。

Ruby是一种通用的动态语言,经常用于脚本编程。

您可以使用反引号符号( ` )来进行任意的系统调用,如下所示。

`<system command>`

还有很多优秀的Ruby宝石,比如WatirRAutomation,用于自动化Web和本地GUI。

关于脚本语言的定义,请参见此处


4
“脚本语言”这个术语非常广泛,它可以包括解释型和编译型语言。特别是 Ruby,它可能会根据我们使用的具体实现而被编译或解释 - 例如,JRuby 被编译成字节码,而 CRuby(Ruby 的参考实现)则是解释执行的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接