如何在C++中嵌入Ruby?

20
什么是最佳的方法在C++中嵌入Ruby作为脚本语言?使用ruby.h?SWIG?还是其他什么东西?我需要将一些C++对象暴露给Ruby,并使Ruby解释器评估访问这些对象的脚本。我不关心扩展Ruby或在C++中访问它。
我找到了这篇关于在C++中嵌入Ruby的文章,虽然非常有用,但它有点过时,我想知道是否有其他相关资源(或类似引擎的开源实现)。

现在你可以使用 mruby https://github.com/mruby/mruby 了! - Jahan Zinedine
5个回答

11

Rice看起来很有前途。


4
注意:针对Windows用户,Rice只能在Cygwin和Mingw下正确编译并运行。:( - Firas Assaad

6
Ruby提供了一个非常有用的README.EXT文件。它包含了许多关于如何扩展Ruby以及在C和Ruby类型之间进行转换的信息。
还有这个摘录来自《Ruby基础教程》,几乎涵盖了相同的内容。
在我的情况下,当我将Ruby脚本添加到我的应用程序中时,我决定不使用swig,因为我的需求非常简单,而且我不想再添加另一个构建依赖项。

5

Swig可能是一个比较好的选择......但Ruby嵌入性不太好......

如果你想要一种能够很好地嵌入到C++中的语言,可以尝试Lua。


我确实尝试过Lua,它是一种很棒的语言,而且嵌入起来相当容易。然而,由于我已经有了许多现有的Ruby代码需要重用,所以Ruby是必需的。 - Firas Assaad
1
不要试图在多线程应用程序中嵌入Ruby并从单个线程中使用它。它们(Ruby程序)一直在改变信号处理程序、环境变量、当前目录等等。 - Lothar
我意识到这个答案已经过去了五年,但是我应该提到Ruby是我最喜欢嵌入在JS、Lua和Python之间的语言。对于那些可能会犹豫的人,我建议阅读http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html并在驳回它之前尝试一个小例子。 - Vortico
我很久没看过它了,它如何处理多任务?它的最大限制是 Ruby 的实现有很多全局变量,这意味着如果你将其嵌入并从多个线程中使用它,就会出现问题,而 Lua 则专门设计用来处理这种情况。 - Keith Nicholas

2
你可能想要查看 tinyrb

1

我一直在开发Rarity(https://github.com/Plaristote/Rarity),它有两个功能:

  • 从C++ API的YML描述生成Ruby绑定
  • 以最接近C ++的方式与Ruby脚本交互

我解决了很多问题(例如异常处理、垃圾回收)... 我还没有看到过像Rarity那样使用代码生成使绑定实现,也没有看到其他库可以如此轻松地转换C ++和Ruby类型。

我认为Rarity值得一试!同时,我也很乐意听取一些反馈 :)!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接