O ile rozumiem, zarówno Scala, jak i Clojure zostały zaprojektowane jako nowe języki, które
- zależą od JVM i
- łatwo integrują się z kodem Java w tym sensie, że pozwalają na korzystanie z klas Java wewnątrz kodu Scala i Clojure.
Począwszy od Java 8 (a może jeszcze mocniej w kolejnych wersjach Java), nastąpią zmiany w semantyce języka Java.
Chciałem zapytać, jak te zmiany wpłyną na interoperacyjność między Javą a Scalą / Clojure i jakie będą tego konsekwencje. Na przykład, ponieważ lambdy w Javie 8 nie są obiektami (patrz np. Tutaj ), Scala i Clojure mogą mieć do czynienia z wartościami Java, które nie są obiektami. Czy to byłby problem?
Mogę wymyślić następujące scenariusze:
- Język Scala lub Clojure zostanie rozszerzony w celu dostosowania do nowej semantyki Java (w celu obsługi nowych wartości niebędących obiektami) i obsługi interoperacyjności z Javą.
- Język Scala lub Clojure nie zostanie przedłużony. Byłoby to możliwe tylko wtedy, gdyby nowe funkcje Java, takie jak wartości funkcji, można było odwzorować na istniejące pojęcia. Np. W Scali nawet funkcja jest obiektem, więc sądzę, że funkcje Java byłyby ponownie zawinięte w jakieś obiekty, gdy staną się widoczne dla Scali.
- Język Scala lub Clojure będzie nadal obsługiwał interoperacyjność do wersji Java 6 lub 7, bez śledzenia najnowszych osiągnięć Javy. Wymagałoby to, aby starsze wersje Java były nadal obsługiwane (przynajmniej przez OpenJDK lub inny projekt), aby te języki mogły być oparte na bardziej konserwatywnej / stabilnej gałęzi Java.
Podsumowując: czy możemy oczekiwać, że przyszły rozwój Java będzie miał wpływ na języki takie jak Scala i Clojure, aby zachować interoperacyjność z Javą? Czy jest już jakaś (prowadząca do) dyskusja na ten temat?
Uwaga
Mogę sobie wyobrazić, że Scala, Clojure i inne języki oparte na JVM nie będą miały większych problemów z aktualizacją ich implementacji do nowszych wersji JVM (i że nowe funkcje JVM jeszcze bardziej ułatwią tę implementację). Moje pytanie dotyczy funkcji Java jako języka i tego, czy / jak inny język JVM będzie w stanie „zobaczyć” / korzystać z tych nowych funkcji, a nie tego, czy języki oparte na JVM będą działały na najnowszych JVM.
String
to Java String
. Dlatego Scala używa pewnych klas bibliotek Java. Ale mogę zmienić sformułowanie, jeśli uważasz, że jest zbyt silny.