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
OK Ich denke, ich bekomme es dank, es ist nativer Code mit einer Laufzeit, ein bisschen analog mit vb6 in dieser Hinsicht, vielleicht – jjb