Soweit ich weiß, wurden sowohl Scala als auch Clojure als neue Sprachen konzipiert
- abhängig von der JVM und
- Einfache Integration in Java-Code in dem Sinne, dass Java-Klassen in Scala- und Clojure-Code verwendet werden können.
Ab Java 8 (und möglicherweise noch stärker mit nachfolgenden Versionen von Java) wird sich die Semantik der Java-Sprache ändern.
Ich wollte fragen, wie sich diese Änderungen auf die Interoperabilität zwischen Java und Scala / Clojure auswirken und welche Konsequenzen dies haben wird. Da Lambdas in Java 8 beispielsweise keine Objekte sind (siehe z. B. hier ), müssen sich Scala und Clojure möglicherweise mit Java-Werten befassen, die keine Objekte sind. Wäre das ein Problem?
Ich kann mir folgende Szenarien vorstellen:
- Die Scala- oder Clojure-Sprache wird erweitert, um sich an die neue Java-Semantik anzupassen (um die neuen Nicht-Objektwerte zu verarbeiten) und die Interoperabilität mit Java zu unterstützen.
- Die Scala- oder Clojure-Sprache wird nicht erweitert. Dies wäre nur möglich, wenn die neuen Java-Funktionen wie Funktionswerte vorhandenen Konzepten zugeordnet werden können. In Scala ist beispielsweise sogar eine Funktion ein Objekt. Ich denke, Java-Funktionen würden wieder in eine Art Objekt eingeschlossen, wenn sie für Scala sichtbar werden.
- Die Scala- oder Clojure-Sprache unterstützt weiterhin die Interoperabilität bis Java 6 oder 7, ohne die neueste Java-Entwicklung zu verfolgen. Dies würde erfordern, dass ältere Versionen von Java weiterhin unterstützt werden (zumindest von OpenJDK oder einem anderen Projekt), damit diese Sprachen auf einem konservativeren / stabileren Zweig von Java basieren können.
Zusammenfassend: Können wir erwarten, dass sich die zukünftige Entwicklung von Java auf Sprachen wie Scala und Clojure auswirkt, um die Interoperabilität mit Java aufrechtzuerhalten? Gibt es bereits eine (Link zu) laufende Diskussion zu diesem Thema?
Hinweis
Ich kann mir vorstellen, dass Scala, Clojure und andere JVM-basierte Sprachen keine größeren Probleme haben werden, ihre Implementierung auf neuere Versionen der JVM zu aktualisieren (und dass neue JVM-Funktionen diese Implementierung noch einfacher machen werden). Meine Frage konzentriert sich auf Funktionen von Java als Sprache und darauf, ob / wie andere JVM-Sprachen diese neuen Funktionen "sehen" / verwenden können, und nicht darauf, ob JVM-basierte Sprachen auf den neuesten JVMs ausgeführt werden.
String
ein Java String
. Daher verwendet Scala bestimmte Java-Bibliotheksklassen. Aber ich kann die Formulierung ändern, wenn Sie denken, dass sie zu stark ist.