2

我刚开始阅读 Ruby,我想知道它是否可以嵌入到像 Lua 这样的 C++ 应用程序中,它提供了一个库来解析给定的脚本文件:https ://stackoverflow.com/a/5127294/399107

4

3 回答 3

2

是的你可以。你只需要在你的应用程序中嵌入一个 Ruby 引擎。

请注意,与主要的 Lua 引擎不同,一些 Ruby 引擎并不是非常适合嵌入到其他程序中。但是,例如,RubiniusIronRubyJRuby是专门为嵌入而设计的,即使它不是很漂亮,您也可以嵌入 YARV 或 MRI,即使它们不是为此而设计的。

还有MRuby,但与其他不同的是,它没有实现完整的 Ruby 语言规范,它只实现了 ISO Ruby 规范的一个子集,它本身只是 Ruby 1.8 和 Ruby 1.9 交集的一小部分。另外,它还没有发布,甚至它的主页都不存在的事实证明了这一点。然而,它是专门为嵌入而设计的,在这个词的两个意义上:嵌入到其他程序中,以及在 RAM 很少的嵌入式设备上有用。

您可能已经注意到,如果应用程序在 Java 平台或 CLI 上运行,那么将 Ruby 嵌入到您的应用程序中会容易得多。Java 平台和 CLI都有C++ 编译,因此该选项并非完全不可能。否则,我会说 Rubinius 更容易嵌入,但更多人尝试嵌入 YARV,因此有更多关于如何做到这一点的博客文章。(或者也许,嵌入 Rubinius 是如此微不足道,没有人需要写关于它的博客文章。)

很久以前,有人正在为 Lua VM 开发 Ruby 的实现,但该实现从未成功。不过会解决你所有的问题:-)

于 2013-05-15T12:19:14.240 回答
1

你当然可以。使用SWIG可以实现,或者您可以为它制作自己的绑定(或谷歌查看是否有人已经完成了这项工作)。最大的问题是你真的想要吗?ruby 解释器很重,界面也不是很好。

Matz 正在开发一个名为mruby的可嵌入 Ruby 版本,它力求像 Lua 一样易于嵌入和轻量级。但它仍然是 alpha 质量。

于 2013-05-15T11:52:33.703 回答
0

是的,这是可能的。大多数标准库类型都是用 C 编写的。当您可以使用 C 时,您也可以使用 C++。使用extern "C"声明的函数来获得正确的绑定。当使用与用于编译 ruby​​ 解释器的编译器不同(不同版本)的 C++ 编译器时,我遇到了很多麻烦。

这是选择 axt 书的一部分,涵盖了 ruby​​ 扩展库:http ://media.pragprog.com/titles/ruby3/ext_ruby.pdf

在一个开源 C++ Web 服务器项目中,我编写了一个 ruby​​ / rack 适配器,以使用带有 rails 的服务器:https ://github.com/TorstenRobitzki/Sioux/tree/master/source/rack

于 2013-05-15T11:53:03.290 回答