Recopilación anticipada


En informática, la compilación anticipada ( compilación AOT ) es el acto de compilar un lenguaje de programación (a menudo) de nivel superior en un lenguaje de nivel (a menudo) inferior antes de la ejecución de un programa, generalmente en el momento de la compilación, para Reducir la cantidad de trabajo necesario para realizar en tiempo de ejecución .

Muy a menudo, se asocia con el acto de compilar un lenguaje de programación de nivel superior , como C o C ++ , o una representación intermedia como el código de bytes de Java o el código de Lenguaje intermedio común (CIL) de .NET Framework , en un lenguaje nativo (dependiente del sistema). ) código de máquina para que el archivo binario resultante se pueda ejecutar de forma nativa, como un compilador nativo estándar . Cuando se usa en este contexto específico, a menudo se ve como lo opuesto a la compilación justo a tiempo (JIT).

Hablando de manera más general, los lenguajes de destino de una compilación AOT no son necesariamente específicos del código de máquina nativo, sino que se definen de manera bastante arbitraria. Algunos artículos académicos usan esta palabra para referirse al acto de compilar el código de bytes de Java en C [1] o el momento en que se realiza la optimización. [2] Un proyecto académico [3] utiliza esta palabra para referirse al acto de precompilar JavaScript en un IR optimizado dependiente de la máquina para V8 (motor JavaScript) [4] y en un código de bytes independiente de la máquina para JavaScriptCore . [5] Algunas implementaciones de lenguaje industrial (por ejemplo , Closure [6] y HermesJavaScript engine [7] ) utiliza esta palabra para referirse al acto de precompilar el lenguaje fuente en un código de bytes específico de la VM. Angular (marco web) usa esta palabra para significar la conversión de su plantilla HTML y TypeScript a JavaScript . [8]

De hecho, dado que todas las compilaciones estáticas se realizan técnicamente con anticipación, esta redacción en particular se utiliza a menudo para enfatizar algún tipo de ventajas de rendimiento derivadas del acto de dicha compilación previa. Por lo tanto, el acto de compilar Java en código de bytes de Java rara vez se denomina AOT, ya que generalmente es un requisito, no una optimización.

Algunos lenguajes de programación con un tiempo de ejecución de código administrado que se puede compilar en una representación intermedia, usan la compilación Just-In -Time (JIT). Esto, brevemente, compila el código intermedio en código de máquina para una ejecución nativa mientras se ejecuta el código intermedio, lo que puede ralentizar el rendimiento de una aplicación. La compilación anticipada elimina la necesidad de este paso al ocurrir antes de la ejecución en lugar de durante la ejecución.

La compilación anticipada para lenguajes tipados dinámicamente en código de máquina nativo u otro código de bytes de VM estático solo es posible en un número limitado de casos. [ cita requerida ] Por ejemplo, el compilador AOT del High Performance Erlang Project (HiPE) para el lenguaje Erlang puede hacer esto debido a las técnicas avanzadas de reconstrucción de tipos estáticos y las especulaciones de tipos.