Anstatt den Quellcode für das jeweilige Betriebssystem (auf das er abzielt) zu kompilieren, kompilieren Sie ihn einmal und führen ihn überall aus.
Für diese Frage würde ich es VM nennen (zum Beispiel sowohl für Java als auch für .NET). So wird die Ausführung von Programmen so etwas wie
------------ ---- ----
| Executable | -> | VM | -> | OS |
------------ ---- ----
Es ist durchaus sinnvoll, dass der Compiler für die jeweilige VM generisch bleibt. Die Implementierung der VM kann jedoch je nach dem Computer, auf dem sie installiert werden soll, variieren (z. B. (* nix, Windows, Mac) x (32 Bit, 64 Bit).
Meine Frage ist, anstatt VM für die jeweiligen Computer zu schreiben, warum ist der Compiler nicht für diesen bestimmten Computer geschrieben? Anstatt die entsprechende VM herunterzuladen, laden Sie den jeweiligen Compiler herunter, und dieser Compiler kümmert sich um den Maschinencode + das Betriebssystem für diesen bestimmten Computer. Endergebnis ist die Ausführung von nativem Code für jeden Computer. Auf jeden Fall müsste jeder Quellcode für diesen bestimmten Computer kompiliert werden, aber heutzutage können uns die automatisierten Systeme und SCM-Builds dabei helfen.
Sind meine Gründe für Verwirrung richtig oder fehlen mir hier einige technische Details?
Bearbeiten:
Tragbarkeit :
Ja, das ist ein Grund, aber ist Portabilität in heutigen automatisierten Systemen ein großes Problem? Wie oft müssen wir uns Sorgen machen, dass wir es nicht für andere Maschinen kompilieren müssen? Ein Code, der für einen nativen Computer kompiliert wurde, würde eine viel bessere Leistung bringen. Nehmen wir zum Beispiel Java, Sie können unter Windows keine Low-Level-Programmierung durchführen und müssen JNI wählen.
Nehmen Sie automatisierte Systeme wie TeamCity / Jenkins oder andere. Wir könnten ein solches automatisiertes System einrichten, bei dem Code, der über die Versionskontrolle übermittelt wird, zur ausführbaren Datei führt.