您能否就以下方面的优缺点发表评论:
答案 0 :(得分:1)
我没有使用过 rjb ,但它在概念上似乎与我用 使用的Python-Java桥接器类似。两者似乎都将JVM运行时作为共享对象或DLL加载到正在运行的Python或Ruby解释器中。
根据我的经验,这种方法运行良好,直到它没有,当它不起作用时,它往往会灾难性地失败。我遇到的与JPype相关的问题与Java运行时和Python运行时对操作环境的不同假设有关。关注的领域包括:
我对这种方法有过不好的经历,我对此很警惕。
尽管如此, rjb 不是JPype,而Ruby不是Python。与Python线程模型相比,Ruby线程模型可以与JVM共存更好。此外,我已经两年多没有玩过这样的技术了,所以事情可能已经发生了变化。
底线:它可能工作正常,但要小心。
关于您的具体问题:
<强>性能强>
我甚至不会在这里猜测,因为这两种方法的性能特征在很大程度上取决于你正在做什么,而你没有概述你对这两种技术的预期用途。
跨平台
任何纯Java(例如,JRuby)都可以在任何有Java VM的地方干净地移植。对于 rjb 解决方案,这不一定是正确的。例如,您可能会遇到不兼容的共享库问题。您可能会发现必须在平台上构建 rjb ,因此必须先构建其他许多东西。等
另一方面,JRuby遇到的问题是很多宝石都不可用。在Java世界中,JNI(即,桥接到C或C ++代码)通常是不受欢迎的。 “最佳”代码是100%Java。在Ruby世界(以及,就此而言,Python世界),桥接到C API是常见的做法。大量的宝石就是这样做的(例如,数据库驱动程序,利用现有开源C API的一些宝石,一些真正想要踢屁股性能的宝石)。 C-Ruby和C之间的桥梁与Java和C之间的桥梁完全不同。为C-Ruby编写的用C代码链接的Gems根本不起作用,就像在JRuby中一样。因此,将代码从C-Ruby移植到JRuby可能会有问题。
Java功能的覆盖范围
由于 rjb 将JVM加载到Ruby解释器中,它应该能够支持JVM支持的任何东西 - 尽管Ruby和Java之间的接口可能变得笨重,至少根据文档。由于JRuby实际上完全是用Java实现的,因此JRuby和Java之间的接口往往更加清晰。