Ich kam in einer Schrift von Miguel de Icaza über die Erstellung von Anwendungen für das iPhone mit Hilfe von mono vor der Zeit (ao) zusammen. Es klingt wie das Ergebnis ist nativer Code. Ist das so oder was ist der Unterschied?Was ist der Unterschied zwischen kompiliertem Code vor der Zeit und nativ kompiliertem Code?
Antwort
Wenn Sie aot = full verwenden (wird nur auf einigen Plattformen unterstützt), wird zur Laufzeit kein Code ausgegeben.
Sie benötigen jedoch immer noch eine Laufzeit, um viele der Funktionen bereitzustellen, die von Ihrer Anwendung verwendet werden. Monos Laufzeit umfasst Unterstützung für Garbage Collection, Thread-Management, IO-Layer, IOremapping-Layer, die Schnittstelle zum Betriebssystem, Unterstützung für den Dezimaltyp, Reflektion (damit Sie zB Dinge wie type.GetMethods() tun können) .
AOT-Kompilierung ist, dass Mono Methoden zu nativem Code kompiliert, bevor das Programm ausgeführt wird. Sie können darüber lesen here
Danke für den Link, wenn die AOT = Full Option verwendet wird, ist es der Fall, dass alle Abhängigkeiten von einer Laufzeit entfernt werden und der resultierende Code nicht verwaltet wird? Sorry, wenn das eine dumme Frage ist – jjb
dh, dass der Code auf einer Maschine ohne Mono laufen kann? – jjb
Der Code ist in nativen Code kompiliert, benötigt aber immer noch die Bibliotheken. – Aragorn
Ja, das Ergebnis ist nativen Code, aber in der grundlegenden AOT-Version muss noch die Mono-Laufzeit ausgeführt werden.
Was im Szenario "Mono on iPhone" passiert, ist etwas komplexer. Zuerst werden die verwalteten Bibliotheken unter Verwendung von Mono Linker getrimmt. Dann wird das Ergebnis in nativen Code mit mono --aot=full
kompiliert. Schließlich wird all dies an mkbundle übergeben, um es in eine einzige ausführbare Datei zu packen, einschließlich der Mono-Laufzeitumgebung.
Wenn Sie nur .NET-Anwendungen ausführen möchten, ohne Microsoft .Net/Mono zu installieren, verwenden Sie einfach mkbundle.
Danke, das hilft mir, es besser zu verstehen – jjb
- 1. Ausführen von kompiliertem Java-Code zur Laufzeit
- 2. Wie kann ich die Verknüpfung zwischen kompiliertem Java-Code überprüfen?
- 3. In JavaScript werden reguläre Ausdrücke in kompiliertem Code ausgewertet?
- 4. Was ist der Unterschied zwischen Return-Code-Fehler und Fehler
- 5. Was ist der Unterschied zwischen `{}` und `()` in diesen Code?
- 6. Wie kompiliere und verknüpfe ich C++ - Code mit kompiliertem C-Code?
- 7. Segmentierungsfehler bei icpc-kompiliertem Programm
- 8. Was ist der Unterschied zwischen 2 Code (Schleife für Javascript)?
- 9. Was ist der Unterschied zwischen zwei Code in Typoskript?
- 10. Was ist der Unterschied zwischen diesen beiden Java-Code-Schnipsel?
- 11. Was ist der Unterschied zwischen `==` und `ist`?
- 12. (Gurke) Was ist der Unterschied zwischen Hintergrund und vor Tag
- 13. Was ist der Unterschied zwischen Code = 1 und Code = 2 in EXC_BAD_ACCESS?
- 14. Was ist der Unterschied zwischen:.! und: r !?
- 15. Was ist der Unterschied zwischen der Verwendung und der Nichtverwendung von Anweisungen mit DbContext [Code zuerst]?
- 16. Was ist der Unterschied zwischen Verilog! und ~?
- 17. Was ist bei der Kompilierung von x64-Code der Unterschied zwischen "x86_amd64" und "amd64"?
- 18. Was ist der Unterschied zwischen:
- 19. Was ist der Unterschied zwischen Difftime und '-'?
- 20. Was ist der Unterschied zwischen $ und $$?
- 21. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 22. Was ist der Unterschied zwischen/* ... */und/** ... */
- 23. Was ist der Unterschied zwischen `&` und `ref`?
- 24. Was ist der Unterschied zwischen $ (...) und `...`
- 25. Was ist der Unterschied zwischen .Equals und ==
- 26. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 27. Was ist der Unterschied zwischen + = und = +?
- 28. Was ist der Unterschied zwischen? und ? = Nil
- 29. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 30. Was ist der Unterschied zwischen einem Instanzinitialisierer und einem Konstruktor?
OK Ich denke, ich bekomme es dank, es ist nativer Code mit einer Laufzeit, ein bisschen analog mit vb6 in dieser Hinsicht, vielleicht – jjb