Он не является передовым, потому что это означало бы невозможность ввода новых байтовых кодов.
Когда новая версия java представила новый байт-код, естественно, более старые версии VM не смогут интерпретировать этот байт-код.
Это означает, что java не может быть передовым, поскольку он поддерживает изменяющийся набор (собственных) команд.
Это отличается от C/C++. Компилятор для такого языка генерирует байт-код для точного процессора, на который вы нацеливаетесь. Набор команд для процессора не изменится, он статичен. Таким образом, при компиляции C для конкретного CPU каждая версия стандарта C/C++ будет компилироваться и запускаться, если есть инструкция, соответствующая требуемой операции.
Редактировать: Эта проблема также проявляется в C/C++, когда вы смотрите внимательно. Например, заголовок <cstdint>
вводит факультативно типов, например. int64_t
. Это по причине прямой совместимости. Старые чипы, возможно, не смогут обрабатывать 64-битные целочисленные типы, поэтому для обеспечения совместимости с ними для них стандарт делает их необязательными для объявления.
«новые банки должны иметь возможность запускать любую версию JVM, которую я хочу». Не было бы это совместимо с передовым? –
@PaulBellora, если я ошибаюсь, передовая совместимость означает, что старые банки все еще могут работать на новом jvm, нет? – Epicblood
Если я кодирую и компилирую программу с использованием C++ 14, вы бы сказали, что она обратно совместима, поскольку она будет работать в любой системе, независимо от версии (я думаю) – Epicblood