Per quanto ho capito, sia Scala che Clojure sono stati progettati come nuove lingue
- 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 anche più fortemente 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é i lambda in Java 8 non sono oggetti (vedere ad esempio qui ), Scala e Clojure potrebbero dover gestire 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 oggetto) e supportare l'interoperabilità con Java.
- Il linguaggio Scala o Clojure non verrà esteso. Ciò sarebbe possibile solo se le nuove funzionalità Java come i valori delle funzioni possono essere associate a concetti esistenti. Ad esempio, in Scala anche una funzione è un oggetto, quindi immagino che le funzioni Java vengano nuovamente racchiuse 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 l'ultimo sviluppo di Java. Ciò richiederebbe che le versioni precedenti di Java siano ancora supportate (almeno da OpenJDK o da un altro progetto), in modo che questi linguaggi possano essere basati su un ramo di Java più conservativo / stabile.
Riassumendo: possiamo aspettarci che il futuro sviluppo di Java avrà un impatto su linguaggi come Scala e Clojure per mantenere l'interoperabilità con Java? Sono già in corso (link a) discussioni su questo argomento?
Nota
Posso immaginare che Scala, Clojure e altri linguaggi basati su JVM non avranno grossi problemi nell'aggiornamento della loro implementazione a versioni più recenti di JVM (e che le nuove funzionalità di JVM renderanno questa implementazione ancora più semplice). La mia domanda si concentra sulle funzionalità di Java come linguaggio e se / come altri linguaggi JVM saranno in grado di "vedere" / utilizzare queste nuove funzionalità, non se i linguaggi basati su JVM verranno eseguiti sugli ultimi JVM.
Stringè una Java String. Quindi Scala utilizza alcune classi di librerie Java. Ma posso cambiare la formulazione se pensi che sia troppo forte.