【问题标题】:Compiling Pharo to C?将Pharo编译为C?
【发布时间】:2015-03-10 15:15:53
【问题描述】:

据说Pharo的VM(CogVM)是在Smalltalk中开发、测试、分析等,但是Smalltalk代码被转编译为C,然后与一些OS抽象C代码一起使用默认系统C编译编译器。

好吧,我想做类似的事情,我不想使用 Pharo 开发、测试和分析代码,而是将其编译为 C。我该怎么做?编译成 C 是如何工作的? Pharo 是否带有 Smalltalk 到 C 的转编译器?我该如何调用它?它是编译完整的 Smalltalk,还是我必须使用某种 Smalltalk 子集?有什么好的文档吗?

【问题讨论】:

    标签: compilation smalltalk pharo


    【解决方案1】:

    Pharo VM 是hosted on github。 按照步骤构建它,您将获得一个名为“generator.image”的 Smalltalk 图像,您可以运行它(它是一个常规图像)。在该图像中,您会找到 VMMaker 包,它负责从用于此的特殊 Smalltalk 方言(称为 Slang;它是 Smalltalk 的子集)生成 C 代码。查看生成器图像中的代码以了解它的作用。当您第一次打开图像时,工作区中还包含一些信息。

    只要你有 C 源代码,它基本上就是直接的 C 编译(我们使用 Cmake + gcc / clang)。

    至于文档:您可能应该阅读Blue Book

    澄清

    正如@Leandro Caniglia 在评论中指出的那样,Slang 的目的是为 VM 生成 C 源代码。它旨在简化向 C 的翻译。这意味着:

    • 可以使用生成机制将任意 Smalltalk 代码转换为 C
    • 可以用 Slang 重写任意 Smalltalk 代码(至少不是“容易”)

    【讨论】:

    • 我认为我们应该澄清一下,Slang 并不是为了提供将 Smalltalk 程序翻译成 C 程序的支持,对吧?否则,这个问题的读者可能会错误地认为有一种相当简单的方法可以做到这一点。 Slang 的表现力足以生成 VM 源代码,但这并不意味着它足以生成任意 Smalltalk 代码或任意 Smalltalk 代码都可以用 Slang 重写。
    • 你是对的,谢谢。我已经更新了我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2021-09-24
    相关资源
    最近更新 更多