在不同的集合中实现ruby

时间:2010-10-27 21:52:27

标签: implementation

我只是对一个概念感到困惑。我一直听说Ruby是一种编程语言。现在,许多公司/个人已经开发了JRuby,它是用于Java的Ruby实现和Jython,它是Ruby的Ruby实现。 任何人都可以解释一下,一种编程语言究竟是如何用另一种编程语言实现的? 如果我有任何意义吗?

是否可以为Prolog等其他系统开发Ruby实现?

有人可以解释一下吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

编程语言只是您,程序员和机器之间的翻译者,具有不同程度的抽象。例如,Ruby本身是用C语言编写的(因为大多数语言都是在自我构建之前,即语言足够强大以构建自身),其中C代码被编译为可以理解Ruby代码的机器代码。它的作用仅仅是从一种范式转换为另一种范式; Ruby - > C - >汇编程序 - >处理器指令和再次备份,也适用于不同程度的动态(一些代码是硬编码的,即不会改变或不能处理结构的变化,而其他代码则专门用于处理动态结构,如JVM)。但它最终都是机器代码。 Ruby是机器代码。 JRuby是在JVM上运行的字节代码,它是机器代码。 Ruby中的String是JRuby中的String,C中的char []数组是机器代码中的结构化内存位置行。您可以使用一组机器代码(抽象地称为“Ruby”)来理解其他机器代码(抽象地称为“Ruby代码”)。

抽象越高,范例对其所依赖的技术平台的依赖程度越低,依赖它的越低。移植软件依赖于堆栈的各个部分,也可在各种平台上使用。我确定有没有Ruby的平台,但如果它们上面有C(或者更具体地说,ANSI C,任何平台真正尝试创建编译器的第一种语言之一)那么它就是可以为它编译一种(或任何其他语言)(带一些调整)。这一切都归结为将您的抽象转换为计算机本身可以理解和采取行动的指令。

例如,Java使用中间层系统(JVM),它是Java代码(所有平台都相同)和平台(大多数不同)之间的转换器。为JVM编写Ruby解析器只是将JVM重新用作中间层而不是使用ANSI C,因此可能更简单一些;如果它在JVM上运行,它可以在JVM可以运行的任何地方运行,而JRuby可以让让JVM的人担心更多特定于平台的东西(我相信JVM本身是用C语言编写的)。

还有另一种看待这种情况的方式,例如像JS.Class那样从一种语言中获取一些范例并在另一种语言中使用它们,因为它们很好/很酷/很时尚。