Tanto quanto eu entendo, Scala e Clojure foram projetados como novos idiomas que
- dependem da JVM e
- integram-se facilmente ao código Java, no sentido em que permitem o uso de classes Java no código Scala e Clojure.
Começando com o Java 8 (e talvez ainda mais fortemente com as versões subseqüentes do Java), haverá mudanças na semântica da linguagem Java.
Eu queria perguntar como essas mudanças afetarão a interoperabilidade entre Java e Scala / Clojure e quais serão as consequências. Por exemplo, como os lambdas no Java 8 não são objetos (veja, por exemplo, aqui ), Scala e Clojure podem precisar lidar com valores Java que não são objetos. Isso seria um problema?
Eu posso pensar nos seguintes cenários:
- A linguagem Scala ou Clojure será estendida para se adaptar à nova semântica Java (para manipular os novos valores não-objeto) e oferecer suporte à interoperabilidade com Java.
- O idioma Scala ou Clojure não será estendido. Isso só seria possível se os novos recursos Java, como valores de função, pudessem ser mapeados para conceitos existentes. Por exemplo, no Scala, mesmo uma função é um objeto, então acho que as funções Java seriam novamente envolvidas em algum tipo de objeto quando elas se tornassem visíveis ao Scala.
- A linguagem Scala ou Clojure continuará a suportar interoperabilidade até Java 6 ou 7, sem seguir o desenvolvimento mais recente do Java. Isso exigiria que versões mais antigas do Java ainda sejam suportadas (pelo menos pelo OpenJDK ou outro projeto), para que essas linguagens possam se basear em um ramo mais conservador / estável do Java.
Resumindo: podemos esperar que o desenvolvimento futuro de Java tenha impacto em linguagens como Scala e Clojure para manter a interoperabilidade com Java? Já existe alguma (link para) discussão em andamento sobre esse tópico?
Nota
Posso imaginar que Scala, Clojure e outras linguagens baseadas em JVM não terão grandes problemas ao atualizar sua implementação para versões mais recentes da JVM (e que os novos recursos da JVM tornarão essa implementação ainda mais fácil). Minha pergunta se concentra nos recursos do Java como uma linguagem e se / como outra linguagem da JVM poderá "ver" / usar esses novos recursos, não se as linguagens baseadas na JVM serão executadas nas mais recentes JVMs.
String
é um Java String
. Portanto, o Scala usa certas classes de bibliotecas Java. Mas posso mudar a formulação se você achar que é muito forte.