Implementación de lenguaje de programación
# Implementación de lenguaje de programación

Una implementación de lenguaje de programación es un sistema para ejecutar programas de ordenador. Hay dos aproximaciones generales a implementación de lenguaje de programación: interpretación y recopilación.

La interpretación es un método de ejecutar un programa. El programa está leído tan entrada por un intérprete, el cual actúa las acciones escritas en el programa.

La compilación es un proceso diferente , donde un compilador lee en un programa, pero en vez de correr el programa, el compilador traduce este a algún otro lenguaje, como bytecode o código de máquina. El código traducido puede ser directamente ejecutado por hardware, o servir tan entrada a otro intérprete u otro compilador.

## Intérprete

Un intérprete está compuesto de dos partes: un parseador y un evaluador. Después de que un programa es leído como un dato de entrada por un intérprete, es procesado por el parser. El parser rompe el programa a componentes de lenguaje para formar un árbol de parseo. El evaluador entonces utiliza el árbol de parseado para ejecutar el programa.

### Máquina virtual

Una máquina virtual es un tipo especial de intérprete que interpreta bytecode. Bytecode Es un código de nivel bajo portátil similar a código de máquina, aunque es generalmente ejecutado en una máquina virtual en vez de una máquina física. Para mejorar su eficiencia, muchos lenguajes de programación como Java, Python, y C# están compilados a bytecode antes de ser interpretados.

### Compilado Justo-a-tiempo

Algunas las máquinas virtuales incluyen un compilador justos-a-tiempo (JIT en inglés) para mejorar la eficacia de ejecución del bytecode. Mientras el bytecode está siendo ejecutado por la máquina virtual, si el proceso JIT del compilador determina que una porción del bytecode será utilizado repetidamente, compila que porción particular a código de máquina. El JIT del compilador entonces almacena el código de máquina en memoria de modo que pueda ser utilizado por la máquina virtual. Los compiladores JIT intentan lograr un equilibrio entre tiempo de recopilación más largo y un tiempo de ejecución más rápida.

## Compilador

Un compilador traduce un programa escrito en una lenguaje a otro lenguaje. La mayoría de compiladores están organizados a tres etapas: un frente, un optimizador, y un fin posterior. El fin de frente es responsable para comprensivo el programa. Hace seguro el programa es válido y transforma él a una representación intermedia, una estructura de dato utilizada por el compilador para representar el programa. El optimizer mejora la representación intermedia para aumentar la velocidad o reducir la medida del ejecutable cuál es finalmente producido por el compilador. El fin posterior convierte la representación intermedia optimizada a la lengua de producción del compilador.

Si un compilador de un lenguaje de alto nivel produce otro lenguaje de nivel alta, se denomina transpilador. Los transpiladores puede ser usados para extender lenguajes existentes o para simplificar el desarrollo de compiladores mediante el uso de implementaciones optimizadas y portátiles de otros lenguajes como C).</ref>

Muchas combinaciones de interpretación y compilación son posibles, y muchas implementaciones de lenguaje de programación modernos incluyen elementos de ambos. Por ejemplo, el lenguaje de programación Smalltalk es convencionalmente implementado mediante compilación a bytecode, el cual es entonces es interpretado o compilado por una máquina virtual. Al ser corrido Smalltalk bytecode en una máquina virtual, es portátil a través de plataformas de hardware diferente.

## Implementaciones múltiples

Los lenguajes de programación pueden tener implementaciones múltiples. Implementaciones diferentes pueden ser escritas en lenguajes diferentes y puede utilizar métodos diferentes para compilar o interpretar código. Por ejemplo, las implementaciones de Python incluyen:

* CPython, la implementación de referencia de Python
* IronPython, una implementación que apunta al Marco .NET (escrito en C#)
* Jython, una implementación que apunta a la máquina virtual Java
* PyPy, una implementación diseñada para velocidad (escrito en RPython)
