* compilador: Un compilador traduce todo el código fuente al código de máquina (o una representación intermedia como bytecode) * antes de * se ejecuta el programa. El código de la máquina resultante se puede ejecutar directamente por el procesador de la computadora. Los compiladores generalmente producen un código optimizado para un mejor rendimiento, pero el proceso de compilación en sí puede llevar tiempo. Los ejemplos incluyen GCC (GNU Compiler Collection) y Clang.
* intérprete: Un intérprete traduce y ejecuta el código fuente de línea por línea, sin crear un archivo ejecutable independiente. Esto permite una retroalimentación más rápida durante el desarrollo porque los errores se identifican tan pronto como se encuentran. Sin embargo, el código interpretado generalmente se ejecuta más lento que el código compilado. Los ejemplos incluyen los motores intérpretes y javascript de Python en los navegadores web.
* ensamblador: Un ensamblador es un tipo específico de traductor que convierte el lenguaje de ensamblaje (un lenguaje de programación de bajo nivel) en el código de la máquina. El lenguaje de ensamblaje utiliza mnemónicos (abreviaturas cortas) que representan las instrucciones de la máquina, lo que lo hace un poco más legible por humanos que el código de máquina pura.
* Transpilador (o compilador de fuente a fuente): Un transpilador traduce el código fuente de un lenguaje de programación de alto nivel a otro lenguaje de programación de alto nivel. No genera código de máquina directamente. Esto es útil para la portación del código entre diferentes idiomas o para modernizar el código heredado. Los ejemplos incluyen Babel (Transpilación de JavaScript ES6+ a ES5) y compiladores TypeScript (Transpining TypeScript a JavaScript).
La diferencia clave entre estos tipos se encuentra en * cuando * y * cómo * ocurre la traducción. Los compiladores traducen todo por adelantado, los intérpretes traducen y ejecutan la línea por línea, y los transpiladores se traducen entre idiomas de alto nivel. Los ensambladores son una forma especializada de compilador que se centra en un lenguaje de muy bajo nivel.