Por lo que yo entiendo, tanto Scala como Clojure han sido diseñados como nuevos lenguajes que
- dependerá de la JVM, y
- se integran fácilmente con el código Java, en el sentido de que permiten usar clases Java dentro del código Scala y Clojure.
Comenzando con Java 8 (y tal vez aún más fuerte con versiones posteriores de Java), habrá cambios en la semántica del lenguaje Java.
Quería preguntar cómo estos cambios afectarán la interoperabilidad entre Java y Scala / Clojure y cuáles serán las consecuencias. Por ejemplo, dado que las lambdas en Java 8 no son objetos (ver, por ejemplo, aquí ), Scala y Clojure podrían tener que lidiar con valores de Java que no son objetos. ¿Sería esto un problema?
Puedo pensar en los siguientes escenarios:
- El lenguaje Scala o Clojure se extenderá para adaptarse a la nueva semántica de Java (para manejar los nuevos valores no objeto) y admitir la interoperabilidad con Java.
- El lenguaje Scala o Clojure no se extenderá. Esto solo sería posible si las nuevas características de Java, como los valores de función, pueden asignarse a conceptos existentes. Por ejemplo, en Scala, incluso una función es un objeto, así que supongo que las funciones de Java volverían a estar envueltas en algún tipo de objetos cuando sean visibles para Scala.
- El lenguaje Scala o Clojure continuará admitiendo la interoperabilidad hasta Java 6 o 7, sin seguir el último desarrollo de Java. Esto requeriría que las versiones anteriores de Java aún sean compatibles (al menos con OpenJDK u otro proyecto), de modo que estos lenguajes puedan basarse en una rama más conservadora / estable de Java.
Resumiendo: ¿podemos esperar que el desarrollo futuro de Java tenga un impacto en lenguajes como Scala y Clojure para mantener la interoperabilidad con Java? ¿Hay alguna (enlace a) discusión en curso sobre este tema?
Nota
Me imagino que Scala, Clojure y otros lenguajes basados en JVM no tendrán problemas importantes para actualizar su implementación a versiones más recientes de JVM (y que las nuevas características de JVM harán que esta implementación sea aún más fácil). Mi pregunta se centra en las características de Java como lenguaje y si / cómo otro lenguaje JVM podrá "ver" / usar estas nuevas características, no si los lenguajes basados en JVM se ejecutarán en los últimos JVM.
String
es un Java String
. Entonces Scala usa ciertas clases de biblioteca Java. Pero puedo cambiar la formulación si crees que es demasiado fuerte.