El proceso de compilación

Los ordenadores son máquinas simples que lo único que pueden hacer es ejecutar una secuencia de órdenes expresadas en un lenguaje máquina entendible por el ordenador.

El lenguaje máquina es un conjunto de códigos numéricos, que le indican a la máquina las operaciones que esta debe realizar. Estas operaciones son muy simples (sumas, restas, multiplicaciones), y agrupadas en un conjunto mayor conforman un programa que realiza las funciones para las cuales se han creado.

Pero existe un problema y es que estos códigos de operación son dependientes de la máquina en cuestión, es decir, que hacer el mismo programa para otra máquina implica volver a codificar dicho programa otra vez en los códigos de operación para esa nueva máquina. Esto es muy costoso tanto en tiempo como en esfuerzo.

Los programas escritos en lenguaje máquina tienen la ventaja de ser muy eficientes, ya que el programador escribe el programa de forma específica para la máquina en cuestión, pudiendo aprovecharse de las características específicas de la máquina, obteniendo de ella el máximo rendimiento. Pero en la práctica, sólo se programa en lenguaje máquina en casos muy concretos, ya que tanto el diseño, como el desarrollo y el mantenimiento lo vuelve muy complejo.

Una de las facilidades que se tiene para la codificación en lenguaje máquina es la utilización del lenguaje ensamblador. Este lenguaje utiliza una notación simbólica para representar los códigos de operación, estos códigos son más fáciles de recordar que el lenguaje máquina. Pero aún utilizando el lenguaje ensamblador para la creación de programas, dicha tarea sigue siendo difícil y engorrosa. En la actualidad, como es lógico pensar, la tarea de generar el código máquina es una tarea que la realizan las máquinas automáticamente.

Lo más deseable para un humano es que se pudieran crear programas en un lenguaje lo más cercano a nuestra forma de trabajar. Lo ideal, podría ser por ejemplo el lenguaje humano, pero hoy en día esto es imposible.

Lo que sí se ha conseguido en la actualidad es que los lenguajes de programación sean independientes de la máquina. De esta forma no hace falta crear completamente diferentes versiones de un mismo programa para diferentes máquinas. A esta característica se le llama portabilidad, la cual ahorra mucho tiempo de trabajo al codificar un solo programa para diferentes máquinas, que en definitiva significa reducción de costes.

La programación en un lenguaje de alto nivel o en un lenguaje ensamblador requiere, por tanto, algún tipo de unión con el lenguaje máquina para que el programa pueda ejecutarse. Las tres interfaces más comunes son: ensamblador, compilador e intérprete. El ensamblador y el compilador traducen el programa a otro lenguaje equivalente en el lenguaje máquina como un paso separado antes de la ejecución. Por otra parte, el intérprete, no genera un programa objeto, sino que ejecuta directamente las instrucciones del lenguaje de alto nivel.