JythonとJRuby対Groovy(およびJava)[終了]


8

私はJVMでプログラミングするためにPythonに非常に興味があり、JavaとRuby(JRubyではない)で、そしてある程度Groovyで働いてきました。

現在、Java-JythonとJava-JRubyの統合にはどのような制限がありますか?Groovyについてはどうですか:JavaクラスがGroovyクラスでできないことを実行できることはありますか?また、IDE統合についてはどうですか(主にEclipseですが、IntelliJとNetbeansも興味深いものです)。

Python、Ruby、Groovyのどちらが優れている/より簡潔であるかは関係ありません。現在、彼らがJVMとツール(特にIDE)でどれだけうまく機能しているかに興味があります。私の主な関心は、それが重要な場合は、Webサーバーの内部ではありません。

カスタムJavaクラスを拡張し、カスタムJavaインターフェースを実装するHelloWorldを取得する簡単な例は、私にとって非常に役立ちます。

回答:


7

JRubyやGroovyの経験はありません。しかし、Jython:

  • NetBeansとの優れた統合。NetBeansは、JythonでPythonプログラムをほとんどそのまま実行できます。「Jython Distribution」プラグインをインストールするだけで完了です。どうやらEclipseも動作します。Jython BookのIDEでのJythonの使用の参照してください。

  • Java-Jython統合は優れています。JythonからJavaを呼び出すのはとても簡単です。JavaからのJythonの呼び出しはそれほど単純ではありませんが(JavaはJythonを考慮して設計されていません)、それでもかなり簡単です。私はほとんどの場合、Jythonでクラスを作成し(Javaクラス/インターフェースを拡張)、オブジェクトファクトリを使用してJavaでそのクラスのインスタンスを作成しました。方法については、JythonとJavaの統合を参照してください。

JythonでのJavaクラスの拡張は次のように機能します。

from javax.swing import JFrame, JButton

class MyFrame(JFrame):

    def __init__(self):
        self.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
        self.size = (300, 300)
        self.add(JButton('Click Me!', actionPerformed=self.print_something))
        self.visible = True

    def print_something(self, event):
        print 'Clicked!'

インターフェースの実装も同様に機能し、インターフェースをインポートし、などのクラス定義を使用してインターフェースを「拡張」し、class MyClass(MyInterface)必要なものを実装します。

Jythonに対する私の唯一の批判は、Jythonの生のパフォーマンスがあまり良くないということです(これは主に、Javaと対話するために大量のリフレクションを使用しているためです)。ただし、本来のパフォーマンスは、通常、スクリプト言語とは無関係です。


素晴らしいもの+1。JythonのパフォーマンスをGroovyの(これも大規模なリフレクションベースの)パフォーマンスと比較してみてください。
Dan Rosenstark、

私は個人的にそれらを比較していませんが、Googleは多くの意見を見つけているようです:www.google.com/#q=jython+vs+groovy+performance
Joonas Pulakka

Google?あれは誰?jythonは他の非Java JVM言語のどれよりも悪いようです。面白い。
Dan Rosenstark、

人々は本格的なデスクトップアプリにPythonを使用しているため、パフォーマンスは多少重要です。JythonがJavaリフレクションAPIを使用していることを確認します。(GroovyとJRubyが採用している手法を採用していないことは確かですか?パフォーマンスの詳細については、同じブログのblog.headius.com/2008/05/power-of-jvm.htmlおよび他の多くの投稿を参照してください。)
Ken Bloom

@Ken Bloom:はい、私はJythonを本格的なデスクトップアプリに使用しません。これは、非常に遅いためです(ただし、本格的なJavaアプリ内に埋め込まれて使用しています)。Jythonは主にリフレクションAPIを使用していると確信しています。GroovyやJRubyとは異なり、Jythonのコードベースは実際には最後の千年紀に由来しています-彼らは最近いくつかの最適化を行った可能性があります。興味深いブログリンクをありがとう!
Joonas Pulakka 2010

4

昨年は、Groovy(およびJavaだけでなく、さらにGroovy)を使用して多くの作業を行ってきました。

IDE統合:Netbeansでは問題ありません。Groovyは動的であるため、Java(Intelisense、リファクタリングなど)のような同じレベルのIDEサポートを期待しないでください。InteliJの方が優れていると言う人もいますが、それをチェックした同僚は気に入らなかった。YMMV。前回チェックしたところ、EclipseでのサポートはNetbeansほど良くありませんでした。

Groovyは、Javaと非常に簡単に統合または混合できます。構文は比較的似ているので、精神的な切り替えはあまり害を及ぼしません。

特に、Grailsフレームワークと一緒に使用する場合、Groovyは(IMO)を操作するのが楽しいです。また、JavaScriptとの類似性も気に入っています。したがって、バックエンドのGroovyとクライアントのJavaScriptを組み合わせたプロジェクトでは、2つの完全に異なる言語を理解する必要はありません。多くの場合、同じ言語の2つの方言に似ています。


2

有効なJavaは(ほぼ)常に有効なGroovyであるため、Groovyに関しては、Groovyクラスは確実にJavaクラスが実行できるすべてのことを実行できます。

Groovy / Grailsの開発に関しては、EclipseとNetBeansの準備が整っていないことがわかりました。しかし、お金があればIntelliJは本当に良いです。


それをありがとう。質問で述べたように、私はWebには興味がないので、IntelliJは無料です。
Dan Rosenstark、

1
:ここで説明するよう(ただし、やや時代遅れ)Javaは、Groovyの(しかし、ほとんど)非常に常に有効ではありませんstackoverflow.com/questions/687601/...
Northover

重要な修飾子を追加しました。
Eric Wilson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.