Наскільки я розумію, і Scala, і Clojure були розроблені як нові мови
- залежать від СВМ та
- легко інтегруватися з кодом 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. Але я можу змінити рецептуру, якщо ви вважаєте, що вона занадто сильна.