VolgaVolga, кстати, в этом Java вроде как уникальна, тк тот же C# таких ограничений не имеет - можно писать на C#11, который вышел в этом году, а компилировать хоть под net framework 3.5
По-вашему, каким образом виртуальная машина Java 8, разработанная десять лет назад, должна знать как выполнять функции Java 18, придуманные в прошлом году?
Василий Банников, обратная совместимость работает при использовании того же набора функций. То есть можно скомпилировать код с помощью JDK 18 и запустить на JDK 8, если использовались функции только JDK 8. Исключение только для синтаксического сахара.
Сергей Горностаев, ну а что в Java 18 из синтаксиса такого, что не может работать на Java 8?
Чисто с инженерной точки зрения, что мешает, например, в компиляторе указать "Синтаксис Java 11, Стандартная библиотека и байткод Java 8"?
Василий Банников, сходу не вспомню, но между Java 8 и Java 18 несколько раз менялся формат class-файлов, добавлялись новые байткоды и появлялись новые функции виртуальной машины, типа Memory API. Чисто с инженерной точки зрения мешает то, что какой-нибудь там паттерн-матчинг выполняется в рантайме, соответственно виртуальная машина должна уметь его выполнять.