【问题标题】:MacRuby: objective-c runtime is same as ruby runtimeMacRuby:objective-c 运行时与 ruby​​ 运行时相同
【发布时间】:2010-01-15 22:13:00
【问题描述】:

我没有受过正规的计算机科学教育,但我已经使用 Java、Ruby、jQuery 进行了很长时间的编程。

我正在检查 macruby 项目。我不断遇到类似于“在 MacRuby 中,objective-c 运行时与 ruby​​ 运行时相同”的语句。

我了解 MRI 是什么。我了解 ruby​​ 1.9 带来了什么。但是我不明白一种语言的虚拟机如何支持另一种语言。

我知道我问的是一个依赖于多年正规教育的问题答案。仍然任何指示和任何讨论都会有所帮助。

我也喜欢我在 macruby 中看到的内容。

【问题讨论】:

    标签: ruby computer-science macruby


    【解决方案1】:

    嗯,

    最简单的解释是 MacRuby 是一个 ruby​​ 1.9 VM。在早期版本中,它是 YARV(ruby 1.9 的官方 VM)的修改版本,它没有为 ruby​​ 字符串、哈希等使用自定义类型,而是使用了苹果基础类中的等价物,例如 NString。随着 0.5 版的出现,基于 LLVM 框架开发了一个全新的 VM,再次兼容 ruby​​ 1.9,它基于 apples 基础类。

    因此,您可以将 Macruby 简单地视为 ruby​​ 1.9 VM。然而,由于使用了上述基础类,它可以与许多苹果自己的 api 进行本机接口,提供只有运行 MacRuby 的人才能使用的附加功能(例如 HotCocoa)。

    【讨论】:

      【解决方案2】:

      只是一个注释

      但是我不明白一种语言的虚拟机如何支持另一种语言。

      部分。

      VM 代表机器和您的编程语言之间的中间层。例如。 Java 虚拟机 (JVM) 执行所谓的 java 字节码。 javac 编译器获取源代码并将其编译成中间语言——即字节码。当你运行你的应用程序时,你实际上是在虚拟机中运行字节码:

      JVM 运行时执行 .class 或 .jar 文件,通过解释 JVM 指令集或使用 Sun 的 HotSpot 等即时编译器 (JIT) 来模拟 JVM 指令集。如今,大多数 JVM 都使用 JIT 编译而不是解释来实现更高的速度。还存在使开发人员能够将类文件预编译为特定平台的本机代码的预编译器。

      因此,可以使用任何语言(例如 Clojure、Scala、Rhino、...)编写特定 VM 的编译器。同样的原则也适用于围绕 Microsoft .NET 的通用中间语言 (CIL) 的体系结构。

      至于 macruby 内部,他们的网站上有一个short overview

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-03
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多