我可以像用Lua一样用Ruby编写c++应用程序吗?

Can I script a C++ application with Ruby like with Lua?

本文关键字:编写 Ruby c++ 一样 应用程序 Lua 我可以      更新时间:2023-10-16

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

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

请注意,与主要的Lua引擎不同,一些Ruby引擎并不真正适合嵌入到其他程序中。但是,例如,Rubinius, IronRuby和JRuby都是专门为嵌入而设计的,即使它不漂亮,你也可以嵌入YARV或MRI,即使它们不是为嵌入而设计的。

还有MRuby,但不像其他的,它没有实现完整的Ruby语言规范,它只实现了ISO Ruby规范的一个子集,它本身只是Ruby 1.8和Ruby 1.9交集的一个小子集。此外,它还没有发布,事实证明,它的主页还不存在。然而,它是专门为嵌入而设计的,从两个意义上来说:嵌入到其他程序中,并且在内存很少的嵌入式设备上很有用。

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

很久以前,有人在为Lua VM开发Ruby的实现,但是这个实现没有任何进展。可以解决你所有的问题:-)

当然可以。使用SWIG是可能的,或者您可以为它创建自己的绑定(或者google查看是否有人已经完成了这项工作)。最大的问题是,你真的想这么做吗?ruby解释器相当笨重,接口也不是很好。

Matz正在开发一个名为mruby的可嵌入版本,它力求像Lua一样易于嵌入和轻巧。

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

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

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