Per quanto ho capito, sia Scala che Clojure sono stati progettati come nuove lingue che
- dipende dalla JVM e
- si integrano facilmente con il codice Java, nel senso che consentono di utilizzare le classi Java all'interno del codice Scala e Clojure.
A partire da Java 8 (e forse ancora più strongmente con le versioni successive di Java), ci saranno cambiamenti nella semantica del linguaggio Java.
Volevo chiedere come questi cambiamenti avranno un impatto sull'interoperabilità tra Java e Scala / Clojure e quali saranno le conseguenze. Ad esempio, poiché lambdas in Java 8 non sono oggetti (vedi ad esempio qui ), Scala e Clojure potrebbero avere a che fare con valori Java che non sono oggetti. Questo sarebbe un problema?
Posso pensare ai seguenti scenari:
- Il linguaggio Scala o Clojure verrà esteso per adattarsi alla nuova semantica Java (per gestire i nuovi valori non object) e supportare l'interoperabilità con Java.
- La lingua di Scala o Clojure sarà non estesa. Ciò sarebbe possibile solo se le nuove funzionalità di Java come i valori di funzione possono essere mappate a concetti esistenti. Ad esempio, in Scala anche una funzione è un oggetto, quindi suppongo che le funzioni Java saranno nuovamente avvolte in una sorta di oggetti quando diventano visibili a Scala.
- Il linguaggio Scala o Clojure continuerà a supportare l'interoperabilità fino a Java 6 o 7, senza seguire lo sviluppo di Java più recente. Ciò richiederebbe che le versioni precedenti di Java siano ancora supportate (almeno da OpenJDK o un altro progetto), in modo che questi linguaggi possano essere basati su un ramo più conservatore / stabile di Java.
Riassumendo: possiamo aspettarci che il futuro sviluppo di Java avrà un impatto su linguaggi come Scala e Clojure per mantenere l'interoperabilità con Java? Esiste già una discussione (collegamento a) su questo argomento?
Nota
Posso immaginare che Scala, Clojure e altri linguaggi basati su JVM non presentino problemi significativi nell'aggiornare la loro implementazione a versioni più recenti della JVM (e che le nuove funzionalità di JVM renderanno questa implementazione ancora più semplice). La mia domanda si concentra sulle funzionalità di Java come lingua e se / come l'altro linguaggio JVM sarà in grado di "vedere" / utilizzare queste nuove funzionalità, non sul fatto che i linguaggi basati su JVM funzioneranno sulle ultime JVM.