gpt4 book ai didi

java - 从 Ruby 使用 Java : JRuby vs. Rjb

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:41 28 4
gpt4 key购买 nike

您能否从以下方面评论一下各自的优点和缺点:

  • 性能(基准?)
  • Java 功能的覆盖范围
  • 跨平台兼容性

最佳答案

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

根据我的经验,这种方法效果很好,直到不起作用,而当它不起作用时,它往往会发生灾难性的失败。我在使用 JPype 时遇到的问题与 Java 运行时和 Python 运行时对操作环境做出的不同假设有关。值得关注的领域包括:

  • 垃圾收集模型。 JVM 的垃圾收集模型与 Python 不同和鲁比的。如果您不小心,这可能(理论上)会导致问题。
  • 线程。几年前,当我使用 JPype 时,这对我来说是一个真正的问题。 JVM 的线程模型与 Python 的线程模型发生冲突,从而导致了奇怪的运行时错误。

我对这种方法有足够的糟糕经历,因此我对此持谨慎态度。

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

底线:它可能工作得很好,但要小心。

关于您的具体问题:

性能

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

跨平台

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

另一方面,您在使用 JRuby 时会遇到的问题是很多 gem 不可用。在 Java 世界中,JNI(即桥接到 C 或 C++ 代码)通常不受欢迎。 “最好的”代码是 100% Java。在 Ruby 世界(以及 Python 世界)中,桥接到 C API 是常见的做法。很多 gem 都可以做到这一点(例如,数据库驱动程序、一些利用现有开源 C API 的 gem、一些真正需要强大性能的 gem)。 C-Ruby 和 C 之间的桥梁与 Java 和 C 之间的桥梁完全不同。为 C-Ruby 编写的在 C 代码中链接的 Gems 根本无法像在 JRuby 中那样工作。因此,将代码从 C-Ruby 移植到 JRuby 可能会出现问题。

Java 功能的覆盖范围

由于rjb将 JVM 加载到 Ruby 解释器中,因此它应该能够支持 JVM 支持的任何内容——尽管 Ruby 和 Java 之间的接口(interface)可能会变得笨拙,至少根据文档是这样。由于 JRuby 实际上完全是用 Java 实现的,因此 JRuby 和 Java 之间的接口(interface)往往更干净一些。

关于java - 从 Ruby 使用 Java : JRuby vs. Rjb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com