visual studio habilitado generate generar esta entorno enabled ejecucion compartido ios compiler-construction xamarin

ios - studio - Compilador de Xamarin Ahead-of-Time(AOT) frente a un compilador ordinario



xamarin documentation (1)

Tengo entendido que el Compilador de Ahead-of-Time (AOT) de Xamarin compila las aplicaciones de Xamarin.iOS directamente con el código ensamblador ARM nativo (Cómo funciona Xamarin) .

Lo que no entiendo, sin embargo, es por qué debe llamarse "Ahead-of-Time" en lugar de simplemente ser un compilador común. ¿Hay alguna distinción entre el compilador AOT de Xamarin y un compilador tradicional o es solo un término de marketing?


Cómo se compara AOT con un compilador JIT tradicional

La compilación Ahead-of-Time (AOT) está en contraste con la compilación Just-in-Time (JIT).

En pocas palabras, los compiladores .NET no generan código de ensamblado específico de plataforma, generan bytecode .NET, instrucciones que son interpretadas por la máquina virtual .NET. Este bytecode es portátil, cualquier .NET VM puede ejecutarlo, ya sea Windows Phone, Mono en Linux o una implementación basada en JavaScript . Desafortunadamente, como el código debe ser interpretado por la máquina virtual, es más lento que el código nativo, que puede ser ejecutado por el propio procesador. Ahí es donde entran JIT y AOT.

Cuando se inicia una aplicación .NET, el compilador JIT analiza el bytecode, identifica las áreas que podrían acelerarse traduciéndose al código nativo y las compila. Durante la ejecución, el compilador también puede identificar las rutas de acceso para la compilación.

Desafortunadamente para .NET, Java y cualquier plataforma que se beneficie de JIT, las condiciones de servicio de la App Store no permiten la generación de código dinámico. Dado que Xamarin no puede realizar JIT en el dispositivo y saben que están enviando a dispositivos ARM, pueden ejecutar un compilador JIT-type de antemano (AOT) y agruparlo en el binario.

Cómo se compara AOT con un compilador de código de máquina

Como se mencionó anteriormente, AOT traduce parte de un bytecode interpretado a código máquina. No elimina la necesidad de un intérprete de bytecode de máquina virtual. La máquina virtual se ejecutará como lo haría si, pero ocasionalmente verá una instrucción que dice "Ejecutar este trozo de código de máquina".

¿Es solo un término de marketing?

No. El mensaje que Xamarin estaba transmitiendo en ese párrafo era que su código funciona más rápido que un lenguaje basado en un código de bytes simple. Tanto para iOS como para Android, pueden ejecutar código nativo en rutas de código de acceso para mejorar el rendimiento. Los términos AOT y JIT son detalles técnicos sobre cómo lo hacen.