Autant que je sache, Scala et Clojure ont été conçus comme de nouvelles langues
- dépendent de la JVM, et
- s'intègre facilement au code Java, dans le sens où ils permettent d'utiliser des classes Java dans le code Scala et Clojure.
À partir de Java 8 (et peut-être encore plus fortement avec les versions ultérieures de Java), il y aura des changements dans la sémantique du langage Java.
Je voulais demander comment ces changements affecteront l'interopérabilité entre Java et Scala / Clojure et quelles en seront les conséquences. Par exemple, étant donné que les lambdas de Java 8 ne sont pas des objets (voir par exemple ici ), Scala et Clojure peuvent avoir à gérer des valeurs Java qui ne sont pas des objets. Serait-ce un problème?
Je peux penser aux scénarios suivants:
- Le langage Scala ou Clojure sera étendu pour s'adapter à la nouvelle sémantique Java (pour gérer les nouvelles valeurs non-objet) et prendre en charge l'interopérabilité avec Java.
- La langue Scala ou Clojure ne sera pas étendue. Cela ne serait possible que si les nouvelles fonctionnalités Java telles que les valeurs de fonction peuvent être mappées à des concepts existants. Par exemple, dans Scala même une fonction est un objet, donc je suppose que les fonctions Java seraient à nouveau enveloppées dans une sorte d'objets lorsqu'elles deviendront visibles pour Scala.
- Le langage Scala ou Clojure continuera de prendre en charge l'interopérabilité jusqu'à Java 6 ou 7, sans suivre le dernier développement de Java. Cela nécessiterait que les anciennes versions de Java soient toujours prises en charge (au moins par OpenJDK ou un autre projet), afin que ces langages puissent être basés sur une branche plus conservatrice / stable de Java.
En résumé: peut-on s'attendre à ce que le développement futur de Java ait un impact sur des langages comme Scala et Clojure pour maintenir l'interopérabilité avec Java? Y a-t-il déjà (lien vers) une discussion en cours sur ce sujet?
Remarque
Je peux imaginer que Scala, Clojure et d'autres langages basés sur JVM n'auront pas de problèmes majeurs à mettre à jour leur implémentation vers des versions plus récentes de la JVM (et que les nouvelles fonctionnalités JVM rendront cette implémentation encore plus facile). Ma question se concentre sur les fonctionnalités de Java en tant que langage et si / comment d'autres langages JVM pourront "voir" / utiliser ces nouvelles fonctionnalités, pas si les langages basés sur JVM fonctionneront sur les dernières JVM.
String
est un Java String
. Scala utilise donc certaines classes de bibliothèque Java. Mais je peux changer la formulation si vous pensez qu'elle est trop forte.