Czy JDK jest kompatybilny" w górę "czy" wstecz"?

Backward {[2] } binary compatibility (lub downward compatibility) - zdolność klientów zbudowanych ze starej wersji library API do działania na nowej ( wiki ).

Upward binary compatibility (lub forward compatibility) - zdolność klientów zbudowanych z nowej wersji library API do działania na starej (wiki ).

Ogólny dokument Sun o niekompatybilności JDK W J2SE 5.0 od 1.4.2 (i Java SE 6 zgodność z J2SE 5.0 too) opisuje kompatybilność JDK w następujący sposób:

JDK 5.0 jest binarny-kompatybilny z Java 2 SDK, v1. 4. 2 z wyjątkiem niezgodności wymienionych poniżej. Oznacza to, że oprócz zauważonych niezgodności, pliki klas zbudowane z kompilatorów wersji 1.4.2 będą działać poprawnie w JDK 5.0.

Przypuszczam, że autorzy dokumentacji mają pomieszane terminy "w górę" i "Wstecz" kompatybilność w to zdanie. Opisują one" wsteczną "kompatybilność, ale nazywają tę funkcję "zgodnością w górę".

Czy to literówka, błąd czy zamierzony termin? Czy JDK jest kompatybilny" w górę "czy" wstecz"?

Author: linuxbuild, 2011-01-14

8 answers

Zauważ, że aby coś było kompatybilne wstecz, musi istnieć odpowiednik, który jest kompatybilny do przodu (celowo lub nieumyślnie). Na przykład: czy czytniki DVD są kompatybilne wstecz z płytami CD, czy płyty CD są kompatybilne wstecz z czytnikami DVD?

W tym przypadku zależy, czy spojrzysz na kompilator (lub generowany przez niego bajt) lub na maszynę wirtualną.

Kompilator nie jest kompatybilny wstecz, ponieważ bajt wygenerowany za pomocą Java5 JDK nie będzie działać w Javie 1.4 jvm (chyba że skompilowany z flagą -target 1.4). Ale JVM jest wstecznie kompatybilny, ponieważ może uruchamiać starsze bajtody.

Więc myślę, że zdecydowali się wziąć pod uwagę kompatybilność z punktu widzenia javaca (ponieważ jest to część specyficzna dla JDK), co oznacza, że wygenerowany bajt może być uruchamiany w przyszłych wydaniach jvm (to jest bardziej związane z JRE, ale także zawarte w JDK).

W skrócie możemy powiedzieć:

  • JDK są (zazwyczaj) do przodu kompatybilny.
  • JRE są (zazwyczaj) kompatybilne wstecz.

(i jest to również lekcja, której należy się nauczyć dawno temu: ludzie piszący Kompilatory mają zazwyczaj rację, a my ludzie używający ich źle XD)

Przy okazji, czy nie ma większego sensu parować do tyłu / do przodu i w dół / w górę, zamiast mieszać je w górę?

 65
Author: fortran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 09:30:25

Rozszerzanie odpowiedzi o najnowsze Java ...

Kompatybilność Java SE 7 i JDK 7

Cytaty ze strony Oracle:

Zgodność to złożony problem. Niniejszy dokument omawia trzy rodzaje o potencjalnych niezgodnościach związanych z wydaniem Javy Platforma:

  1. Source : kompatybilność ze źródłami dotyczy tłumaczenia kodu źródłowego Javy do plików klas, w tym tego, czy kod nadal kompiluje się w wszystkie.
  2. Binary : kompatybilność binarna jest zdefiniowana w specyfikacji języka Java jako zachowująca możliwość połączenia bez błędu.
  3. behawioralna : kompatybilność behawioralna obejmuje semantykę kodu wykonywanego w czasie wykonywania.

... i

Niezgodności pomiędzy Java SE 7 i Java SE 6 Java SE 7 jest silnie zgodna z poprzednimi wersjami platformy Java. Prawie wszystkie istniejące programy powinny działać na Javie SE 7 bez modyfikacja. Istnieją jednak niewielkie potencjalne źródła i niezgodności binarne w JRE i JDK, które wiążą się z rzadkimi okoliczności i "sprawy narożne", które są tu udokumentowane dla kompletność.

Java SE 7000 (JVM), lub Java SE API

... i

Niezgodności pomiędzy JDK 7 i JDK 6

JDK 7 Niezgodność w javac, w HotSpot lub Java SE API

(Brak preambuły – tylko lista niezgodności.)

 18
Author: Graham Perrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-22 08:11:04

Tylko do tyłu. Forward compat ("z wdziękiem Akceptuj dane wejściowe przeznaczone dla późniejszych wersji samego siebie") wymagałoby, aby JVM 1.5 był w stanie uruchomić skompilowany kod 1.6, czego nie może.

Wstecz wymaga "jeśli może pracować z danymi wejściowymi generowanymi przez starsze urządzenie", co jest prawdą, ponieważ JVM 1.6 może uruchamiać skompilowany kod 1.5.

Każde wydanie JDK / JRE pokrywa się z wersją kodu bajtowego Javy. Każdy kompilator tworzy kod o określonej wersji kodu bajtowego. Każdy JVM rozumie wersję oraz wszystkie wcześniejsze wersje określonej wersji kodu bajtowego.

Gdy JVM ładuje klasę sprawdza wersję kodu bajtowego i jeśli jest > niż najnowsza wersja JVMs, pojawi się błąd. (ClassVersionError czy coś).

 11
Author: Mike Q,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:38:48

Java (VM) jest wstecznie kompatybilna. Kod zbudowany przez Javę 1.4.2 będzie działał na maszynach wirtualnych 1.5 i 6. kompilator JDK nie jest kompatybilny wstecz. Tak więc kod nie może być skompilowany przez Javę 1.5, aby działał na przykład w wersji 1.4.2.

 6
Author: tstevens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:39:54

JDK jest wstecznie kompatybilny, tzn. kod bajtowy zgodny ze specyfikacją 1.4.2 będzie działał na Javie 5 JVM

 3
Author: lweller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:30:24

JDK jest kompatybilny wstecz zgodnie z definicją z wiki.

 1
Author: Faisal Feroz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:28:21

Powinno być kompatybilne wstecz.

 1
Author: Navi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:28:59

Jdk jest kompatybilny w górę-nowa wersja może działać na starej

 -2
Author: programmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:29:27