C ++可以包含在Ruby C扩展中吗?

时间:2013-12-11 15:39:40

标签: c++ ruby-on-rails c ruby wrapper

过去很可能会出现这种情况,我在网上找到了一些很好的资源和描述,但没有什么是非常确定的。有没有办法围绕C Ruby扩展包装C ++,以便C ++和Ruby可以“通信”?问这个的简单原因是因为虽然Ruby中的C扩展在大型场景中的行为明显比Ruby本身快,但C ++的执行速度却比C快。另一个原因是很多人似乎都在学习C ++反对C,并且更熟悉它。如果你是C ++专业人士,那么C将是一件小事可以学习。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这是可能的,但你必须小心许多事情。特别例外。

Ruby使用setjmp / longjmp处理异常。这使得任何涉及C ++函数的堆栈都可以在不调用任何本地析构函数的情况下被释放。作为一种解决方法,您必须从可能引发错误的所有可能调用中解救,自己释放堆栈(可能使用c ++异常)并再次提升它们。

类似地,c ++ stdlib中有许多调用可以抛出异常(甚至是new运算符),你不能让它们进入ruby世界或某些东西会崩溃致命。你必须抓住它们并将它们作为红宝石例外提升。

这种转换游戏可能会降低您的代码速度并使界面难以编写和理解。可能还有其他问题。公开具有继承链的类可能很棘手。

看看rice。它可能会对你有帮助。