首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Ruby中使用Java : JRuby与Rjb

从Ruby中使用Java : JRuby与Rjb
EN

Stack Overflow用户
提问于 2012-02-10 02:34:42
回答 1查看 1.1K关注 0票数 1

你能否从以下几个方面来评论每一种方法的优缺点:

Java的特性(benchmarks?)

  • Coverage

  • Cross-platform兼容性
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 03:27:23

我没有使用rjb,但在概念上,它似乎与我使用过的Python桥JPype类似。两者似乎都将JVM运行时作为共享对象或DLL加载到运行中的Python或Ruby解释器中。

根据我的经验,这种方法工作得很好,直到它不起作用,而当它不起作用时,它往往会灾难性地失败。我在JPype中遇到的问题与运行时和Python运行时对操作环境的不同假设有关。令人关切的领域包括:

  • 垃圾收集模型。JVM的垃圾收集模型不同于Python和Ruby的垃圾收集模型。当我几年前使用JPype时,这对我来说是一个真正的问题。JVM的线程模型与Python的线程模型发生冲突,从而导致了奇怪的运行时错误。

我已经有过很多不好的经验,所以我对此很警惕。

话虽如此,但rjb不是JPype,Ruby也不是Python。Ruby线程模型可能比Python线程模型更好地与JVM共存。而且,我已经两年多没有使用过这样的技术了,所以事情可能已经改变了。

底线:这可能很好,但要小心。

关于你的具体问题:

性能

我甚至不会在这里冒险猜测,因为这两种方法的性能特性将在很大程度上取决于您正在做什么,而且您还没有概述您对这两种技术的预期用途。

跨平台

任何纯Java (例如,JRuby)都会干净地移植到任何有Java的地方。这并不一定适用于rjb解决方案。例如,您可能会遇到不兼容的共享库问题。您可能会发现您必须在一个平台上构建rjb,这就需要首先构建许多其他东西。等。

另一方面,在JRuby中遇到的问题是很多宝石都不可用。在Java世界中,JNI (即连接到C或C++代码)通常受到反对。“最佳”代码是100% Java。在Ruby世界(以及Python世界)中,连接到APIs是常见的做法。很多gems都是这样做的(例如,数据库驱动程序、一些利用现有开源C API的gems、一些真正想要出色的性能的gems )。C-Ruby和C之间的桥梁完全不同于为C-Ruby编写的Java和C- Gems之间的桥梁,C代码中的链接不能像在JRuby中那样工作。因此,将代码从C移植到JRuby可能会有问题。

Java特性的覆盖

因为rjb将JVM加载到Ruby解释器中,所以它应该能够支持JVM支持的任何东西--尽管Ruby和Java之间的接口可能变得笨拙,至少根据文档是这样的。由于JRuby实际上完全是用Java实现的,所以JRuby和Java之间的接口往往更简洁一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9221969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档