1. Intérpretes:
* Relación: Los intérpretes son como los compiladores, pero en lugar de producir el código de la máquina, ejecutan el código fuente directamente.
* diferencia: Los compiladores traducen todo el programa a la vez, mientras que los intérpretes ejecutan cada línea una por una.
* Ejemplo: Python, JavaScript, Ruby
2. Ensambladores:
* Relación: Los ensambladores traducen el lenguaje de ensamblaje (código de bajo nivel) en el código de la máquina, actuando como un puente entre el código legible por humanos y el lenguaje de la computadora.
* diferencia: Los compiladores trabajan con idiomas de alto nivel, mientras que los ensambladores tratan con instrucciones de bajo nivel.
* Ejemplo: Nasm, masm
3. Transpiladores:
* Relación: Los transpiladores, o compiladores de fuente a fuente, convierten el código de un lenguaje de programación a otro.
* diferencia: En lugar de producir código de máquina, emiten código en un lenguaje de alto nivel diferente.
* Ejemplo: Babel (Código JavaScript de Transpiles), TypeScript (Transpiles a JavaScript), Coffeescript (Transpiles a JavaScript)
4. Preprocesadores:
* Relación: Los preprocesadores modifican el código fuente antes de compilarse. Pueden definir macros, incluir archivos externos y manejar la compilación condicional.
* diferencia: Se utilizan como un paso de preprocesamiento antes del proceso de compilación real.
* Ejemplo: C Preprocesador, SASS (preprocesador para CSS)
5. Descompiladores:
* Relación: Los descompiladores son lo opuesto a los compiladores. Intentan revertir el código de la máquina de ingeniería nuevamente en un idioma de alto nivel.
* diferencia: Los descompiladores a menudo pierden información durante el proceso, lo que resulta en un código menos legible.
* Ejemplo: Ida Pro, Ghidra
6. Enlaces:
* Relación: Los enlazadores combinan el código compilado de varios archivos en un solo archivo ejecutable.
* diferencia: No son parte del proceso de compilación en sí, pero son cruciales para construir un programa completo.
* Ejemplo: GNU LD, enlazador de Microsoft
Todas estas herramientas tienen un objetivo similar de convertir código de una forma a otra, lo que los convierte en parientes cercanos para la familia del compilador. Sin embargo, cada uno tiene tareas específicas y trabajan en diferentes niveles de abstracción.