Über die Rosetta-Übersetzungsumgebung von Apple
(developer.apple.com)-
Rosetta ist ein Übersetzungsprozess, der es ermöglicht, Apps mit x86_64-Befehlen auf Apple Silicon auszuführen.
-
Für Nutzer ist Rosetta nicht sichtbar. Wenn eine ausführbare Datei nur Intel-Befehle enthält, startet macOS automatisch Rosetta und beginnt mit der Übersetzung.
-
Nach Abschluss der Übersetzung führt das System statt des Originals die übersetzte ausführbare Datei aus. Da diese Übersetzung Zeit beim Start kostet, kann das Starten bzw. Ausführen der App langsamer sein.
-
Das System bevorzugt die Ausführung von arm64-Befehlen einer App. Wenn ein Binärprogramm sowohl arm64 als auch x86_64 enthält, können Nutzer festlegen, dass es zwangsweise mit Rosetta ausgeführt wird, zum Beispiel wenn ein bestimmtes Plugin arm64 nicht unterstützt.
-
Das System verhindert, dass arm64- und x86_64-Code innerhalb desselben Prozesses gemischt werden. Rosetta wird als Ganzes angewendet, einschließlich dynamisch geladener Codemodule.
Nicht übersetzbar
- Apps, die einen JIT-Compiler enthalten, werden zwar insgesamt übersetzt, aber die folgenden Dinge werden nicht übersetzt:
→ Kernel-Erweiterungen
→ Virtuelle Maschinen, die die x86_64-Computerplattform virtualisieren
- Rosetta übersetzt alle x86_64-Befehle, unterstützt jedoch keine neueren oder prozessorspezifischen Funktionen wie AVX, AVX2 oder AVX512.
→ Wenn solcher Code vorhanden ist, sollten diese Funktionen erst nach Prüfung der tatsächlichen Verfügbarkeit, etwa mit der Funktion sysctlbyname, aufgerufen werden.
- Ob ein Binärprogramm als von Rosetta übersetztes Binärprogramm läuft, lässt sich prüfen, indem man der Funktion
sysctlbynamedas Flagsysctl.proc_translatedübergibt.
1 Kommentare
Es ist ein offizielles Dokument, aber es ist so gut aufbereitet, dass ich es kurz übersetzt und hier gepostet habe.
Wichtig ist, dass Rosetta keine Emulation, sondern eine „Translation“ ist.