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.