私の知る限り、ScalaとClojureはどちらも新しい言語として設計されています。
- JVMに依存する
- ScalaおよびClojureコード内でJavaクラスを使用できるという意味で、Javaコードと簡単に統合できます。
Java 8(以降のバージョンのJavaではさらに強力になる可能性があります)から、Java言語のセマンティクスに変更が加えられます。
これらの変更がJavaとScala / Clojureの間の相互運用性にどのように影響し、どのような結果になるかを尋ねたかったのです。たとえば、Java 8のラムダはオブジェクトではないため(ここを参照)、ScalaとClojureはオブジェクトではないJava値を処理する必要がある場合があります。これは問題になりますか?
次のシナリオを考えることができます。
- ScalaまたはClojure言語は、新しいJavaセマンティクス(新しい非オブジェクト値を処理する)に適応するように拡張され、Javaとの相互運用性をサポートします。
- ScalaまたはClojure言語は拡張されません。これは、関数値などの新しいJava機能を既存の概念にマッピングできる場合にのみ可能です。たとえば、Scalaでは関数もオブジェクトであるため、Java関数はScalaから見えるようになったときに再び何らかのオブジェクトにラップされると思います。
- ScalaまたはClojure言語は、最新のJavaの開発に従うことなく、引き続きJava 6または7までの相互運用性をサポートします。これには、Javaのより保守的で安定したブランチに基づいてこれらの言語を使用できるように、Javaの古いバージョンが(少なくともOpenJDKまたは別のプロジェクトで)サポートされている必要があります。
要約:Javaの将来の開発がScalaやClojureなどの言語に影響を与え、Javaとの相互運用性を維持できると期待できますか?このトピックに関する進行中の議論は既にありますか?
注意
Scala、Clojure、およびその他のJVMベースの言語では、実装をJVMの新しいバージョンに更新するのに大きな問題はないことを想像できます(新しいJVM機能により、この実装がさらに簡単になります)。私の質問は、言語としてのJavaの機能と、JVMベースの言語が最新のJVMで実行されるかどうかではなく、他のJVM言語がこれらの新機能を「見る」/使用する方法に焦点を当てています。
String
はJava String
です。そのため、Scalaは特定のJavaライブラリクラスを使用します。しかし、あなたがそれが強すぎると思うなら、私は処方を変えることができます。