【问题标题】:How to embed Ruby in C++?如何在 C++ 中嵌入 Ruby?
【发布时间】:2010-09-19 08:28:34
【问题描述】:

将 Ruby 作为脚本语言嵌入到 C++ 中的最佳方法是什么?使用 ruby​​.h?痛饮?还有什么?我需要将一些 C++ 对象暴露给 Ruby,并让 Ruby 解释器评估访问这些对象的脚本。我不关心扩展 Ruby 或在 C++ 中访问它。

我找到了这个article on embedding Ruby in C++,虽然它非常有用,但它有点老了,我想知道是否有关于这个主题的任何其他资源(或类似引擎的开源实现)。

【问题讨论】:

标签: c++ ruby scripting embedded-language


【解决方案1】:

Rice 看起来很有希望。

【讨论】:

  • Windows 用户注意事项:Rice 只能在 Cygwin 和 Mingw 下正确编译和运行。 :(
【解决方案2】:

Ruby 提供了一个非常有用的 README.EXT 文件。它有很多关于如何扩展 Ruby 以及在 C 和 Ruby 类型之间转换的信息。

还有来自pick axe bookexcerpt,它几乎涵盖了相同的内容。

就我而言,当我将 Ruby 脚本添加到我的应用程序时,我决定不使用 swig,因为我的需求非常简单,我不想再添加另一个构建依赖项。

【讨论】:

    【解决方案3】:

    swig 可能是要走的路……但是 ruby​​ 嵌入得不是很好……

    如果您想要一种可以很好地嵌入 C++ 的语言,请尝试 lua

    【讨论】:

    • 我确实尝试过 lua,它是一种很棒的语言,而且很容易嵌入。然而,Ruby 是一项要求,因为我已经有很多现有的 Ruby 代码想要重用。
    • 是的,甚至不要尝试嵌入 ruby​​ 并从多线程应用程序的单个线程中使用它。他们(ruby 程序)一直在改变信号处理程序、环境变量、当前目录等。
    • 我意识到这个答案已经有五年的历史了,但我应该提到 Ruby 是我最喜欢嵌入 JS、Lua 和 Python 中的语言。对于那些可能会犹豫的人,我建议阅读ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html 并在忽略它之前尝试一个小例子。
    • 好久没看,它是如何处理多任务的?它最大的限制是 ruby​​ 的实现有很多全局意义,如果你嵌入它并从多个线程中使用它,你会遇到问题,而不是专门为处理这种情况而设计的 lua。
    【解决方案4】:

    您不妨查看tinyrb

    【讨论】:

      【解决方案5】:

      我一直在研究 Rarity (https://github.com/Plaristote/Rarity),它做了两件事:

      • 根据 C++ API 的 YML 描述生成 Ruby 绑定
      • 允许以最常见的 C++ 方式与 Ruby 脚本交互

      我已经解决了很多问题(异常处理、垃圾收集)... 我在其他任何地方都没有见过 Rarity 用来让你的绑定变得生动的代码生成。我还没有看到任何其他库允许在 C++ 和 Ruby 类型之间进行如此简单的转换。

      我认为瑞瑞值得一试!我也很高兴得到一些反馈:)!

      【讨论】:

        猜你喜欢
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多