25

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

谢谢你,原谅我黑掉Ruby是一种脚本语言还是一种解释型语言?

+0

可能的重复[是否Ruby真的是一种解释语言,如果它的所有实现都编译成字节码?](http://stackoverflow.com/questions/717490/is-ruby-really-an-interpreted-language-if -all-of-its-implement-are-compile) – nawfal

回答

37

事情不只是黑色和白色。至少,他们也是大大小小,响亮而安静,蓝色和橙色,灰色和灰色,长与短,对与错等。

解释/编译只是语言分类的一种方式,无论您是否将相同的语言称为“脚本语言”,它都完全独立于(在无数其他事物中)。最糟糕的是,它也是一个破碎的分类:

  • 解释型/编译依赖于语言的实现,而不是在语言(这不只是理论,确实有很多人会为这两个解释器和编译器几种语言存在)
  • 有一些语言实现(包括大多数Ruby实现),编译器,但“only”编译为字节码并解释该字节码。
  • 也有在解释和编译之间切换到本地代码(JIT编译器)的实现。

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

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

所以,我想可以调用Ruby一种脚本语言。当然,这并不意味着Rails Web应用上的ruby只是一个脚本。

+0

那么Java呢?我想我无法将其定义为脚本语言是真的吗?为什么?谢谢 –

+1

@Guiseppe:很少有人使用Java进行脚本编写,因此通常不会将其称为脚本语言。当然,如果某些应用程序确实使用Java进行脚本编写,那么Java在这种情况下确实可以作为脚本语言。 – delnan

+2

现在这是我在SE看到的最自命不凡的答案。他不想让你教他生活,他只是对Ruby有个疑问...... – user832146

3

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

4

是的。

详细响应:

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

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

您可以使用反斜线符号进行任意系统调用,如下所示。

`<system command>` 

也有许多优秀的红宝石的宝石,例如WatirRAutomation自动化网络和本地的GUI。请参阅here