Подтвердить что ты не робот

Совместим ли JDK "вверх" или "назад"?

Обратная совместимость с двоичными файлами (или вниз) - способность клиентов, построенных с использованием старой версии API-библиотеки библиотеки, работать на новой (wiki).

Двусторонняя совместимость вверх / вперед) - способность клиентов, построенных с новой версией API библиотеки, работать на старой (wiki).

Общий документ Sun о JDK Несовместимость в J2SE 5.0 с версии 1.4.2совместимость с Java SE 6 с J2SE 5.0) описывает совместимость JDK следующим образом:

JDK 5.0 поддерживает вверх двоично-совместимый с Java 2 SDK, v1.4.2, за исключением несовместимостей, перечисленных ниже. Это означает, что, за исключением отмеченных несовместимостей, файлы классов, созданные с использованием компиляторов версии 1.4.2, будут корректно работать в JDK 5.0.

Я полагаю, что в этом предложении у авторов документации есть смешанные термины "вверх" и "назад". Они описывают "обратную" совместимость, но называют эту функцию "восходящей" совместимостью.

Это опечатка, ошибка или предполагаемый термин здесь? Совместим ли JDK "вверх" или "назад"?

4b9b3361

Ответ 1

Обратите внимание, что для того, чтобы что-то было совместимо с обратной связью, должен быть аналог, который является форвардом совместимым (либо намеренно, либо непреднамеренно). Например: читают ли DVD-носители обратно совместимые с CD или совместимы ли CD с устройствами чтения DVD?

В этом случае это зависит от того, смотрите ли вы на компилятор (или генерируемый байт-код) или на виртуальную машину.

Компилятор не поддерживает обратную совместимость, поскольку байт-код, сгенерированный с Java5 JDK, не будет запускаться в Java 1.4 jvm (если не скомпилирован с флагом -target 1.4). Но JVM обратно совместим, так как он может запускать старшие байт-коды.

Поэтому я предполагаю, что они решили рассмотреть совместимость с точки зрения javac (поскольку она является частью, специфичной для JDK), что означает, что генерируемый байткод может быть запущен в будущих выпусках jvm (что более связано к JRE, но также в комплекте с JDK).

Вкратце, мы можем сказать:

  • JDK (обычно) совместимы в прямом режиме.
  • JRE (обычно) обратная совместимость.

(И он также служит уроком, который нужно изучить давно: люди, пишущие компиляторы, обычно правы, а мы, люди, используем их неправильно xD)

Кстати, не имеет ли смысл смещаться назад/вперед и вниз/вверх, а не смешивать их?

Ответ 2

Расширение ответов включает в себя самую последнюю Java...

Совместимость с Java SE 7 и JDK 7

Цитаты из необработанной страницы Oracle:

Совместимость - сложная проблема. В этом документе рассматриваются три типа потенциальных несовместимостей, связанных с выпуском Java Платформа:

  • Источник: проблема совместимости с исходным кодом для перевода исходного кода Java в файлы классов, включая код, который все еще компилируется все.
  • Двоичный: двоичная совместимость определена в Спецификации языка Java как сохраняющая возможность связывания без ошибок.
  • Поведенческий. Поведенческая совместимость включает семантику кода, который выполняется во время выполнения.

... и

Несовместимость между Java SE 7 и Java SE 6 Java SE 7 сильно совместим с предыдущими версиями платформы Java. Почти все существующие программы должны запускаться на Java SE 7 без модификация. Однако есть некоторые незначительные потенциальные источники и бинарные несовместимости в JRE и JDK, которые обстоятельства и "угловые случаи", которые описаны здесь для полнота.

Java SE 7 Несовместимость в языке, JVM или Java SE API

... и

Несовместимость между JDK 7 и JDK 6

JDK 7 Несовместимость в javac, в HotSpot или Java SE API

(Нет преамбулы там - только список несовместимостей.)

Ответ 3

Только назад. Прямая совместимость ( "изящно принять ввод, предназначенный для более поздних версий" ) потребует, чтобы 1,5 JVM могли запускать 1,6 скомпилированный код, который он не может.

В обратном порядке требуется "если он может работать с вводом, сгенерированным более старым устройством", что верно, так как 1,6 JVM может выполнять 1,5 скомпилированный код.

Каждая версия JDK/JRE совпадает с версией байт-кода Java. Каждый компилятор создает код конкретной версии байт-кода. Каждая JVM понимает версию и все более ранние версии конкретной версии байт-кода.

Когда JVM загружает класс, он проверяет версию байт-кода и, если онa > , чем версия с понятным интерфейсом JVM, вы получите сообщение об ошибке. (ClassVersionError или что-то еще).

Ответ 4

Java (VM) обратная совместимость. Код, созданный java 1.4.2, будет работать на 1,5 и 6 виртуальных машинах. Компилятор JDK не поддерживает обратную совместимость. Поэтому код не может быть скомпилирован java 1.5 для запуска на 1.4.2, например.

Ответ 5

JDK обратная совместимость, то есть байт-код, соответствующий спецификации 1.4.2, будет запущен на Java 5 JVM

Ответ 6

JDK является совместимым в соответствии с определением из wiki.

Ответ 7

Он должен быть обратно совместимым.

Ответ 8

jdk восходящая совместимость - новая версия может работать на старой версии