Насколько я понимаю, и Scala, и Clojure были разработаны как новые языки, которые
- зависит от JVM, и
- легко интегрируется с кодом Java в том смысле, что они позволяют использовать классы Java внутри кода Scala и Clojure.
Начиная с Java 8 (и, возможно, даже более сильно с последующими версиями Java), будут происходить изменения в семантике языка Java.
Я хотел спросить, как эти изменения повлияют на совместимость между Java и Scala / Clojure и каковы будут последствия. Например, поскольку лямбды в Java 8 не являются объектами (см., Например, здесь ), Scala и Clojure могут иметь дело со значениями Java, которые не являются объектами. Будет ли это проблемой?
Я могу думать о следующих сценариях:
- Язык Scala или Clojure будет расширен для адаптации к новой семантике Java (для обработки новых не-объектных значений) и поддержки взаимодействия с Java.
- Язык Scala или Clojure не будет расширен. Это будет возможно только в том случае, если новые функции Java, такие как значения функций, могут быть сопоставлены с существующими концепциями. Например, в Scala даже функция - это объект, поэтому я предполагаю, что функции Java снова будут помещены в какие-то объекты, когда они станут видимыми для Scala.
- Язык Scala или Clojure будет продолжать поддерживать совместимость вплоть до Java 6 или 7, не следуя последним разработкам Java. Это потребует поддержки старых версий Java (по крайней мере, OpenJDK или другого проекта), чтобы эти языки могли основываться на более консервативной / стабильной ветви Java.
Подводя итог: можем ли мы ожидать, что будущее развитие Java окажет влияние на такие языки, как Scala и Clojure, чтобы обеспечить совместимость с Java? Есть ли какая-либо (ссылка на) текущая дискуссия на эту тему уже?
Запись
Я могу себе представить, что Scala, Clojure и другие языки на основе JVM не будут иметь серьезных проблем при обновлении своей реализации до более новых версий JVM (и что новые функции JVM сделают эту реализацию еще проще). Мой вопрос сосредоточен на особенностях Java как языка и на том, сможет ли / как другой JVM-язык «увидеть» / использовать эти новые функции, а не на том, будут ли языки на основе JVM работать на последних версиях JVM.
String
- это Java String
. Так что Scala использует определенные классы библиотек Java. Но я могу изменить формулировку, если вы думаете, что она слишком сильна.