15

背景:私はRuby(Railsではない)で「標準」(特別なことは何もない)Webアプリケーションを作成しており、デプロイメントについて考え始める必要があります。

そのため、実際にJavaライブラリが必要かどうかに関係なく、JRubyを使用してRubyWebアプリケーションをデプロイするための多くの推奨事項を聞いてきました。これはどれほど真実ですか?速度のためだけにJava実装を使用する価値はありますか?そうすることで他に何かを得ることができますか?問題が発生しますか?

PS:私はJavaをよく知らないので、「Javaでその一部を書くことができる」というのはあまり役に立ちません。

4

2 に答える 2

24

JRuby は、最も完全な Ruby 実装の 1 つです (IronRuby、Maglev、Rubinius、XRuby、YARV、MacRuby など、他にもたくさんあります)。これは非常に包括的であるため、ネイティブ C コードを使用する gem を使用しない限り、互換性に関しては問題ない可能性が非常に高くなります。

JRuby は実際の C 実装よりも少し高速ですが、実際のスレッドをサポートしていますが、公式の実装はそれを取得するのに少し苦労しています (まだGreen Threadsを使用しています)。JRuby から Java スレッドを使用するのは非常に簡単ですが、コードを Java と結合する必要があります (わずかなDIを使用すると、この結合は 1 回しか行われません)。

もう 1 つの利点は、ランタイム ツールです。言語ではなくプラットフォームとしての Java には、問題の診断やアプリケーションの状態のチェックに役立つ多くのランタイム ツール (プロファイラー、JConsole など) があります。

Twitterのエンジニアはまた、Ruby VMは長寿命のプロセスの環境であることに少し問題があると述べましたが、JVM は過去 10 年間にわたってそのために最適化されてきたため、その点で非常に優れています。

最近、Ruby にもセキュリティ上の問題が少しありましたが、JRuby の実装には影響しませんでした。

一方、プロジェクトにはより多くの成果物 (JVM、JRuby jar など) が必要です。長期間存続するアプリケーションを使用していて、より優れたランタイム サポートが必要な場合は、JRuby が優れた方法となります。それ以外の場合は、実際に移動するためにこれらのものが必要になるまで安全に待つことができます (スムーズに進む可能性があります)。

于 2009-05-30T02:09:01.993 に答える
6

私は日常的に JRuby を愛用していますが、実際に JRuby が必要でない限り、MRI (別名 C-Ruby) を使用することをお勧めします。

JRuby を使用する理由:

  1. Java 統合
  2. 制限された環境 (あなたのマシンには Ruby 以外で Java がインストールされており、root を持っていません)
  3. 制限された環境 (Ruby はインストールされていますが、ルートがないため、必要な gem をインストールできません)
  4. Ruby 1.8 のパフォーマンスの限界に達したため、1.9 を使用できません

あなたが説明したことから、上記の理由のいずれもありません。

C-Ruby 1.9 では、C-Ruby 1.8 に比べてパフォーマンスが大幅に向上しています。C-Ruby 1.9 が JRuby 1.8 または JRuby 1.9 とどのように比較されるかについては、まだ読んでいません (または自分で調べていません)。いずれにせよ、パフォーマンスの問題は (まだ) 発生していないので、心配する必要はありません。

良いニュースは、どちらから始めても、必要に応じて後で変換できることです。それはすべて Ruby であり、Webrick と Mongrel の gem は両方で動作します。

前述のように、C 拡張を持つ ruby​​ gem は JRuby の下にインストールできません。ruby C 拡張機能が FFI を利用する場合、これが将来変更されることを願っています。

http://kenai.com/projects/ruby-ffi/pages/Home

http://isitjruby.com/

于 2009-06-01T03:56:10.043 に答える