你能否从以下几个方面来评论每一种方法的优缺点:
Java的特性(benchmarks?)
发布于 2012-02-10 03:27:23
我没有使用rjb,但在概念上,它似乎与我使用过的Python桥JPype类似。两者似乎都将JVM运行时作为共享对象或DLL加载到运行中的Python或Ruby解释器中。
根据我的经验,这种方法工作得很好,直到它不起作用,而当它不起作用时,它往往会灾难性地失败。我在JPype中遇到的问题与运行时和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之间的接口往往更简洁一些。
https://stackoverflow.com/questions/9221969
复制相似问题