2010-02-24 13 views
9

Ich bin neu in Mono und erst vor kurzem angefangen. Wird Mono-Programm von C# zu nativem Code kompiliert, um auf mehreren Betriebssystemen laufen zu können?Kann mono C# und native kompilieren?

und auch, sah ich einen Screencast auf MonoTouch, der mir sagt, dass der Monotouch (vor allem) alles auf Native für C# kompilieren, um auf Iphone laufen zu können.

Ich bin ziemlich verwirrt.

Antwort

19

Mono kompiliert standardmäßig einen intermediären Bytecode, der dann auf einer virtuellen Maschine ausgeführt wird. Dieser Bytecode ist portabel, ist jedoch kein systemeigener Maschinencode.

Mono hat an AOT compiler, die native Bilder für wenn Bytecode keine Option ist.

1

Der Kern des Mono-Projekts ist ein JITter für MSIL (die Zwischensprache, die von den .NET-Compilern erzeugt wird).

Natürlich ist ein Just-In-Time-Compiler immer noch ein Compiler, und Sie können einfach den vom JIT-Prozess erzeugten nativen Code verwenden und diesen später ausführen. Abhängig vom JITter kann es dafür explizit Einrichtungen bereitstellen.

5

Mono selbst wird auf den .NET CLR-Bytecode kompiliert, sodass es auf jeder .NET- oder Mono-fähigen Plattform ausgeführt werden kann. Diese ausführbaren Dateien bestehen nicht aus nativen Maschinenanweisungen; Sie werden Just-in-Time von der Laufzeit des ausführenden Systems in den nativen Code kompiliert. Kurz gesagt, Mono-Binärdateien sind tragbar.

Ab CocoaTouch war die Kompilierung in nativen Code erforderlich, da Apple Systeme wie Mono auf dem iPhone nicht zulassen wird. Es ist ein Ausnahmefall; normale Mono-Programme tun dies nicht.

6

Fast alle .NET-Plattformen, sowohl Microsoft (einschließlich Desktop, Kompaktframework und Microframework) als auch Drittanbieter (wie Mono), kompilieren zuerst alles zu einer gemeinsamen Zwischensprache, die portabel ist, dann Just-in-Time Kompilieren Sie während der Ausführung in nativen Code. Einige haben kein JIT und interpretieren einfach die IL direkt.

Nativer Code ist offensichtlich nicht portabel.

Hilft das?

2

Ja, Sie können in C# oder anderen Dotnet-Sprachen wie VB.Net schreiben, wenn Sie gegen Mono kompilieren. Mono kompiliert Ihren Code in IL (eine Zwischensprache), die Sie bereitstellen, und dann wird JIT (just in time) kompiliert, wenn er ausgeführt wird.

Mono kann eine Reihe von Plattformen wie Windows, Mac OSX, Linux und sogar das iPhone laufen. Obwohl mit der iPhone-Implementierung, glaube ich, dass Ihr Code ist in der Tat nahtlos nach Ziel C kompiliert, die dann in nativen Code und nicht in IL kompiliert wird.

7

Überprüfen Sie 'mkbundle', um die Mono-Laufzeit in Ihre ausführbare Datei zu kompilieren. z. mkbundle --static --deps Hallo.exe -o Hallo

Verwandte Themen