stringtranslate.com

Implementación del lenguaje de programación

En programación informática , una implementación de lenguaje de programación es un sistema para ejecutar programas informáticos . Existen dos enfoques generales para la implementación de lenguajes de programación: [1]

Intérprete

Un intérprete se compone de dos partes: un analizador sintáctico y un evaluador . Después de que un intérprete lee un programa como entrada, el analizador lo procesa. El analizador sintáctico divide el programa en componentes de lenguaje para formar un árbol de análisis sintáctico . Luego, el evaluador utiliza el árbol de análisis sintáctico para ejecutar el programa. [3]

Maquina virtual

Una máquina virtual es un tipo especial de intérprete que interpreta código de bytes. [2] El código de bytes es un código portátil de bajo nivel similar al código de máquina, aunque generalmente se ejecuta en una máquina virtual en lugar de una máquina física. [4] Para mejorar su eficiencia, muchos lenguajes de programación como Java , [4] Python , [5] y C# [6] se compilan en código de bytes antes de ser interpretados.

Compilador justo a tiempo

Algunas máquinas virtuales incluyen un compilador Just-In-Time (JIT) para mejorar la eficiencia de la ejecución del código de bytes. Mientras la máquina virtual ejecuta el código de bytes, si el compilador JIT determina que una parte del código de bytes se utilizará repetidamente, compila esa parte en particular en código de máquina. Luego, el compilador JIT almacena el código de máquina en la memoria para que la máquina virtual pueda usarlo. Los compiladores JIT intentan lograr un equilibrio entre un tiempo de compilación más largo y un tiempo de ejecución más rápido. [2]

Compilador

Un compilador traduce un programa escrito en un lenguaje a otro. La mayoría de los compiladores se organizan en tres etapas: un front-end , un optimizador y un back-end . El front-end es responsable de comprender el programa. Se asegura de que el programa sea válido y lo transforma en una representación intermedia , una estructura de datos utilizada por el compilador para representar el programa. El optimizador mejora la representación intermedia para aumentar la velocidad o reducir el tamaño del ejecutable que finalmente produce el compilador. El back-end convierte la representación intermedia optimizada en el lenguaje de salida del compilador. [7]

Si un compilador de un lenguaje de alto nivel determinado produce otro lenguaje de alto nivel, se le denomina transpilador . Los transpiladores se pueden utilizar para ampliar lenguajes existentes o para simplificar el desarrollo de compiladores aprovechando implementaciones portables y bien optimizadas de otros lenguajes (como C ). [2]

Son posibles muchas combinaciones de interpretación y compilación, y muchas implementaciones de lenguajes de programación modernos incluyen elementos de ambos. Por ejemplo, el lenguaje de programación Smalltalk se implementa convencionalmente mediante compilación en bytecode , que luego es interpretado o compilado por una máquina virtual . Dado que el bytecode de Smalltalk se ejecuta en una máquina virtual, es portable entre diferentes plataformas de hardware. [8]

Implementaciones múltiples

Los lenguajes de programación pueden tener múltiples implementaciones. Se pueden escribir diferentes implementaciones en diferentes lenguajes y se pueden utilizar diferentes métodos para compilar o interpretar el código. Por ejemplo, las implementaciones de Python incluyen: [9]

Referencias

  1. ^ Ranta, Aarne (6 de febrero de 2012). Implementing Programming Languages ​​(PDF) . Publicaciones universitarias. Págs. 16-18. ISBN. 9781848900646Archivado (PDF) del original el 7 de noviembre de 2020. Consultado el 22 de marzo de 2020 .
  2. ^ abcde Baker, Greg. "Implementaciones del lenguaje". Ciencias de la computación - Universidad Simon Fraser . Archivado desde el original el 8 de marzo de 2019. Consultado el 22 de marzo de 2020 .
  3. ^ Evans, David (19 de agosto de 2011). Introducción a la informática (PDF) . Universidad de Virginia. p. 211 . Consultado el 22 de marzo de 2020 .
  4. ^ ab Sridhar, Jay (29 de agosto de 2017). "Por qué la máquina virtual Java ayuda a que su código funcione mejor". MakeUseOf . Consultado el 22 de marzo de 2020 .
  5. ^ Bennett, James (23 de abril de 2018). «An introduction to Python bytecode» (Introducción al código de bytes de Python). Opensource.com . Consultado el 22 de marzo de 2020 .
  6. ^ Ali, Mirza Farrukh (12 de octubre de 2017). "Common Language Runtime(CLR) DotNet". Medium . Consultado el 22 de marzo de 2020 .
  7. ^ Cooper, Keith; Torczon, Linda (7 de febrero de 2011). Ingeniería de un compilador (2.ª ed.). Morgan Kaufmann. pp. 6-9. ISBN 9780120884780.
  8. ^ Lewis, Simon (11 de mayo de 1995). El arte y la ciencia de Smalltalk (PDF) . Prentice Hall. pp. 20-21. ISBN 9780133713459. Recuperado el 23 de marzo de 2020 .
  9. ^ "Implementaciones alternativas de Python". Python.org . Consultado el 23 de marzo de 2020 .

Enlaces externos