31

我刚刚注意到,在 Ruby 的维基百科页面中,这种语言被定义为解释性语言。
我知道我的背景中可能缺少一些东西。
我一直都知道不需要编译器的解释语言和编译语言(需要在执行程序之前编译)之间的区别,但是脚本语言的特点是什么?
Ruby 可以定义为脚本语言吗?

谢谢并原谅我停电

4

3 回答 3

46

事情不仅仅是黑白的。最起码也有大有小,有声有无,有蓝有橙,有灰有灰,有长有短,有对有错,等等。

解释/编译只是对语言进行分类的一种方式,无论您是否将同一种语言称为“脚本语言”,它都完全独立于(在无数其他事物中)。最重要的是,这也是一个错误的分类:

  • 解释/编译取决于语言实现,而不是语言(这不仅仅是理论,确实有相当多的语言同时存在解释器和编译器)
  • 有一些语言实现(其中很多,包括大多数 Ruby 实现)编译器,但“仅”编译为字节码并解释该字节码。
  • 还有一些实现可以在解释和编译为本机代码(JIT 编译器)之间切换。

你看,现实是一头复杂的野兽;)如上所述,Ruby 经常被编译。然后解释该编译的输出,至少在某些情况下 - 还有 JIT 编译的实现(Rubinius 和 IIRC JRuby 在一段时间后编译为 Java 字节码)。参考实现长期以来一直是编译器,IIRC 仍然是。Ruby 是解释的还是编译的?除非你定义它,否则这两个术语都没有意义;)

但回到问题:“脚本语言”也不是语言的属性,它取决于语言的使用方式——即语言是否用于脚本任务。如果您正在寻找定义,“脚本语言”上的 Wikipedia 页面可能会有所帮助(只是不要让他们将您与实现细节的注释混淆,例如脚本通常被解释)。确实有一些程序使用 Ruby 执行脚本任务,并且无疑有许多独立的 Ruby 程序可能符合脚本的要求(网络抓取、系统管理等)。

所以的,我想可以称 Ruby 为一种脚本语言。当然,这并不意味着 ruby​​ on rails web 应用程序只是一个脚本。

于 2011-09-02T13:41:35.293 回答
5

是的。

详细回复:

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

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

您可以使用如下所示的反引号进行任意系统调用。

`<system command>`

还有许多优秀的 Ruby gem,例如用于自动化 Web 和原生 GUI的WatirRAutomation 。

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

于 2011-09-02T13:39:42.593 回答
3

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

于 2011-09-02T13:38:16.247 回答