Traductor - un programa o herramienta técnica que realiza la traducción del programa [1] [2] .
La traducción de un programa es la transformación de un programa presentado en uno de los lenguajes de programación en un programa escrito en otro lenguaje. El traductor normalmente también realiza diagnósticos de errores, genera diccionarios de identificadores, imprime el texto del programa, etc. [1]
El idioma en el que se presenta el programa de entrada se denomina idioma fuente , y el programa en sí se denomina código fuente . El idioma de salida se denomina idioma de destino .
En el caso general, el concepto de traducción se aplica no solo a los lenguajes de programación, sino también a otros lenguajes, tanto lenguajes informáticos formales (como lenguajes de marcado HTML ) como lenguajes naturales ( ruso , inglés , etc.) [ 3] [4] .
Hay varios tipos de traductores [2] .
El propósito de la traducción es convertir el texto de un idioma a un idioma comprensible para el destinatario. Cuando se difunda un programa de ordenador, el destinatario podrá ser:
Tipos de transmisión:
El lenguaje del procesador (dispositivo, máquina) se llama lenguaje máquina, código máquina . El código en lenguaje máquina es ejecutado por el procesador. Por lo general, el lenguaje máquina es un lenguaje de bajo nivel , pero hay procesadores que usan lenguajes de alto nivel (por ejemplo, iAPX-432 [5] ). Sin embargo, tales procesadores no han ganado distribución debido a su complejidad y alto costo.
Un compilador es una especie de traductor que convierte el código fuente de un lenguaje de programación a un lenguaje de máquina [6] .
El proceso de compilación suele constar de varios pasos:
El programa puede utilizar servicios proporcionados por el sistema operativo y bibliotecas de terceros (por ejemplo, bibliotecas para trabajar con archivos y bibliotecas para crear una interfaz gráfica). La vinculación o linking se realiza para agregar código máquina de otros archivos objeto (código de bibliotecas estáticas ) e información sobre bibliotecas dinámicas a un archivo objeto . La vinculación o vinculación la realiza el enlazador o linker . El enlazador puede ser un programa independiente o parte de un compilador . El enlazador crea un ejecutable . El archivo ejecutable (programa) se inicia de la siguiente manera:
Beneficios de la compilación:
Desventajas de la compilación:
Un ensamblador es un compilador que convierte texto de lenguaje ensamblador a lenguaje máquina . El lenguaje ensamblador es un lenguaje cercano al lenguaje máquina , un lenguaje de bajo nivel .
La interpretación es el proceso de lectura y ejecución del código fuente . Implementado por un programa intérprete .
El intérprete puede trabajar de dos formas:
En el primer caso no se utiliza la traducción y en el segundo caso se utiliza la traducción del código fuente al código intermedio.
Etapas del intérprete:
El intérprete modela una máquina (máquina virtual ), implementa un ciclo de búsqueda-ejecución de comandos de máquina. Los comandos de máquina no están escritos en lenguaje de máquina, sino en un lenguaje de alto nivel . Un intérprete puede llamarse un ejecutor de lenguaje de máquina virtual .
La interpretación pura generalmente se aplica a lenguajes con una estructura simple, como lenguajes de scripting , APL y Lisp .
Ejemplos de intérpretes que producen bytecode : Perl , PHP , Python , Erlang .
Ventajas de los intérpretes sobre los compiladores:
Desventajas de los intérpretes en comparación con los compiladores:
Comparación entre un intérprete puro y un intérprete generador de código de bytes :
Compilación dinámica o JIT: traducción, en la que el código fuente o intermedio se convierte (compila) en código de máquina directamente en tiempo de ejecución, "sobre la marcha" ( inglés justo a tiempo , JIT ). Cada pieza de código se compila solo una vez; el código compilado se almacena en caché y se reutiliza según sea necesario.
Ventajas de la compilación dinámica en comparación con la compilación:
Desventajas de la compilación dinámica frente a la compilación y la interpretación pura:
La compilación dinámica es adecuada para aplicaciones web .
Apareció la compilación dinámica y se admite hasta cierto punto en las implementaciones de Java , .NET Framework , Perl , Python .
Los conceptos de "traducción" e "interpretación" son diferentes. Durante la traducción, el código del programa se convierte de un idioma a otro. Durante la interpretación, se ejecuta el programa.
Dado que el propósito de la traducción suele ser preparar para la interpretación, estos procesos se consideran juntos. Por ejemplo, los lenguajes de programación a menudo se caracterizan como "compilados" o "interpretados" dependiendo de si el lenguaje se usa de manera predominante: compilación o interpretación. Además, se compilan casi todos los lenguajes de bajo nivel y de tercera generación , como ensamblador , C o Modula-2 , y se interpretan los lenguajes de nivel superior , como Python o SQL .
Por otro lado, existe una interpenetración de los procesos de traducción e interpretación: los intérpretes pueden estar compilando (incluida la compilación dinámica), y los traductores pueden requerir interpretación para implementar la metaprogramación (por ejemplo, para macros en lenguaje ensamblador , compilación condicional en C o plantillas ). en C++ ).
Además, un mismo lenguaje de programación puede ser tanto traducido como interpretado, y en ambos casos deben existir etapas comunes de análisis y reconocimiento de constructos y directivas del lenguaje fuente. Esto se aplica tanto a implementaciones de software como de hardware, por ejemplo, procesadores de la familia x86 , antes de ejecutar instrucciones en lenguaje de máquina , decodificarlas, resaltar campos de operandos en códigos de operación (indicando registros , direcciones de memoria , constantes ), profundidad de bits , etc., y en Pentium En los procesadores con arquitectura NetBurst , el mismo código de máquina se traduce adicionalmente en una secuencia de microoperaciones antes de almacenarse en el caché interno .
![]() |
---|