2010-02-24 18 views
9

Soy nuevo en Mono y recién comencé recientemente. ¿El programa mono se compila desde C# al código nativo para poder ejecutar en varios sistemas operativos?¿Mono compila C# y es nativo?

y también, vi un screencast en MonoTouch, que me dice que el monotouch (particularmente) compila todo hasta Native para que C# pueda ejecutarse en Iphone.

Im bastante confuso.

Respuesta

19

Mono se compila de forma predeterminada en un bytecode intermedio, que luego se ejecuta en una máquina virtual. Este código de bytes es portátil pero no es un código de máquina nativo.

Mono tiene an AOT compiler que producirá imágenes nativas para cuando bytecode no es una opción.

1

El núcleo del proyecto Mono es un JITter para MSIL (el lenguaje intermedio producido por los compiladores .NET).

Por supuesto, un Compilador Just-In-Time es aún un compilador, y usted puede simplemente tomar el código nativo producido por el proceso JIT y ejecutarlo más tarde. Dependiendo de JITter, podría proporcionar facilidades explícitamente para hacer eso.

5

Mono se compilará en el bytecode .NET CLR, permitiéndole ejecutar en cualquier plataforma compatible con .NET o Mono. Estos ejecutables no están hechos de instrucciones nativas de la máquina; son compilados justo a tiempo en código nativo por el tiempo de ejecución en el sistema que lo ejecuta. En resumen, los binarios Mono son portátiles.

A partir de CocoaTouch, la compilación al código nativo era necesaria porque Apple no permitirá sistemas como Mono en el iPhone. Es un caso excepcional; los programas Mono normales no harán esto.

6

Casi todas las plataformas .NET, tanto Microsoft (incluyendo escritorio, marco compacto y microframework) y de terceros (como mono) compilan todo primero a un lenguaje intermedio común que es portátil, entonces just-in-time compilar durante la ejecución al código nativo. Algunos no tienen JIT y simplemente interpretan el IL directamente.

El código nativo obviamente no es portátil.

¿Eso ayuda?

2

Sí, puede escribir en C# u otros lenguajes dotnet como VB.Net al compilar contra Mono. Mono compila su código a IL (un lenguaje intermedio) que implementa y luego compila JIT (justo a tiempo) cuando se ejecuta.

Mono puede ejecutar una serie de plataformas como Windows, Mac OSX, Linux e incluso el iPhone. Aunque con la implementación de iPhone, creo que su código está de hecho compilado a Objective C que luego se compila en código nativo en lugar de IL.

7

Eche un vistazo a 'mkbundle' para compilar el tiempo de ejecución mono en su ejecutable. por ej. mkbundle --static --deps Hello.exe -o hello