Insgesamt muss ich sagen, dass es keine Garantie dafür gibt, dass dieselbe Quelle denselben Bytecode erzeugt, wenn sie von demselben Compiler kompiliert wird, jedoch auf einer anderen Plattform.
Ich würde Szenarien untersuchen, die verschiedene Sprachen (Codepages) betreffen, zum Beispiel Windows mit japanischer Sprachunterstützung. Denken Sie an Multi-Byte-Zeichen. Sofern der Compiler nicht immer davon ausgeht, dass er alle Sprachen unterstützen muss, wird er möglicherweise für 8-Bit-ASCII optimiert.
Im Rahmen der binären Kompatibilität von Release zu Release in SOM (Forman, Conner, Danforth und Raper, Proceedings of OOPSLA '95) sind Java-Programmiersprachen-Binärdateien unter allen relevanten Transformationen, die die Autoren identifizieren (mit einigen Einschränkungen), binärkompatibel in Bezug auf das Hinzufügen von Instanzvariablen). Im Folgenden finden Sie eine Liste einiger wichtiger binärkompatibler Änderungen, die von der Java-Programmiersprache unterstützt werden:
• Neuimplementierung vorhandener Methoden, Konstruktoren und Initialisierer zur Verbesserung der Leistung.
• Ändern von Methoden oder Konstruktoren, um Werte für Eingaben zurückzugeben, für die sie zuvor entweder Ausnahmen ausgelöst haben, die normalerweise nicht auftreten sollten, oder fehlgeschlagen sind, indem sie in eine Endlosschleife gegangen sind oder einen Deadlock verursacht haben.
• Hinzufügen neuer Felder, Methoden oder Konstruktoren zu einer vorhandenen Klasse oder Schnittstelle.
• Löschen privater Felder, Methoden oder Konstruktoren einer Klasse.
• Wenn ein gesamtes Paket aktualisiert wird, löschen Sie Standardzugriffsfelder (nur für Pakete), Methoden oder Konstruktoren von Klassen und Schnittstellen im Paket.
• Neuanordnen der Felder, Methoden oder Konstruktoren in einer vorhandenen Typdeklaration.
• Verschieben einer Methode in der Klassenhierarchie nach oben.
• Neuordnung der Liste der direkten Superschnittstellen einer Klasse oder Schnittstelle.
• Einfügen neuer Klassen- oder Schnittstellentypen in die Typhierarchie.
In diesem Kapitel werden Mindeststandards für die Binärkompatibilität festgelegt, die von allen Implementierungen garantiert werden. Die Programmiersprache Java garantiert Kompatibilität, wenn Binärdateien von Klassen und Schnittstellen gemischt werden, von denen nicht bekannt ist, dass sie aus kompatiblen Quellen stammen, deren Quellen jedoch auf die hier beschriebenen kompatiblen Arten geändert wurden. Beachten Sie, dass wir die Kompatibilität zwischen Releases einer Anwendung diskutieren. Eine Erörterung der Kompatibilität zwischen Versionen der Java SE-Plattform würde den Rahmen dieses Kapitels sprengen.