2

JSR-335 は、Java 8 とともにまもなく登場すると言われています。これにより、クロージャーと仮想拡張メソッドがサポートされます。JVMレベルでこれに対する特定のサポートがあるのだろうか? もしそうなら、クロージャと拡張メソッドのような機能 (scala のトレイトや暗黙関数など) を提供する JVM ベースの関数型言語の速度向上を期待できますか?

編集: Brian Goetz によるJava 8 に関するこの oracle プレゼンテーションを読むと、次のように見えます: - クロージャは必要ありません - 仮想拡張メソッドは特定の JVM サポートを必要とします。

これは、scala では、暗黙の要素とトレイトの一部をより効率的に再実装できることを意味するのでしょうか?

4

2 に答える 2

3

拡張メソッドを使用してトレイトを実装することはできないと思います-メソッドの実装はsuperそれらを呼び出すことができません(afaik-私は間違っているかもしれません)、そしてオーバーライドのセマンティクスは異なります。さらに、それはフィールドをカバーせず、メソッドだけをカバーします。

暗黙的な問題には固有の問題がないため、JVMが暗黙的な問題を解決するためにできることは何もありません。これらは、通常のパラメータとして渡される通常のインスタンスです。それらを検索するとコンパイラが遅くなりますが、JVMもそれを支援できません。

これらの機能がScalaで何かを助けているとは思いませんが、実際にはほとんど意味がありません。Scalaは、JVM1.5クラスファイルを使用してJVM1.5バイトコードを生成します。JVM 1.6バイトコードをオンにすることができますが、これはほとんど違いがありません。Scala 2.10では、1.6クラスファイルが実験的に有効になります。

その理由は非常に単純です。Java1.7は1.5バイトコードで1.5クラスファイルを実行しますが、その逆はありません。古いバージョンのJavaを実行している人はまだたくさんいますが、それが変わる可能性はほとんどありません。

したがって、Java 1.8の機能は、大きな利点がない限り、レーダーには表示されません。そして、それでも、Scalaでコンパイルされたコードでは利用できる可能性が高いですが、Scalaライブラリ自体では利用できません。同様に、それが大きな利点をもたらさない限り、両方のバージョンでライブラリが利用可能になることはありません。

于 2012-04-11T17:39:54.023 に答える
2

Scala の速度はすでに Java に非常に近いと思います。動的に型付けされた jvm 言語は遅いです (Groovy など)。実際、JDK 7 には、これらの動的 jvm 言語を改善する目的で、新しい機能 invokedynamic が追加されました: http://java.sun.com/developer/technicalArticles/DynTypeLang/

于 2012-04-11T14:36:32.793 に答える