1.7 Compiladores, Proceso de ensamblado y ligado

El dia de hoy hablaremos de los procesos que conlleva la creacion de un programa en cualquier lenguaje. Empecemos hablando de los tipos de archivos que comunmente se generan o crean para crear un programa, es asi que primero tenemos a:

Código Fuente: El código fuente es aquel que contiene las lineas de código escritas en el lenguaje de programación sobre el cual estamos trabajando.


Código Fuente en Python


Sin embargo este código no es entendible por el ordenador dado su origen de solo reconocer instrucciones en lenguaje maquina (0 y 1) por lo tanto todo nuestro código solo es una maraña de símbolos raros para el ordenador, para poder ser reconocible todo lo escrito, el lenguaje de programación se vale de un programa llamado interprete o compilador (ya es cuestión del lenguaje), el cual traduce o interpreta vaya la redundancia todo nuestro código a lenguaje maquina, de esta manera se obtiene un archivo el cual es llamado:

Código Objeto: archivo compuesto por un conjunto de datos escritos en un lenguaje de programación  de tipo binario o código maquina obtenidos de la traducción de un anterior código fuente. En la practica generalmente se genera un codigo intermedio, como lo es, ensamblador, es decir se transforma el codigo fuente a codigo ensamblador y posteriormente se traduce a lenguaje maquina.

En python por ejemplo podemos considerar a los archivos .pyc archivos de código objeto ya que el intérprete no puede leer directamente el texto en el archivo * .py, por lo que este texto se convierte primero en un código de bytes que está dirigido al PVM (no al hardware sino a PVM "Python Virtual Machine" ) . PVM ejecuta este código de bytes. *.

En resumen nuestro programa lo escribimos en el lenguaje de programación que deseamos y el compilador o interprete lo traduce en un archivo diferente para que la maquina pueda leerlos.




Contenido de un archivo de código objeto visto desde un block de notas

Y por ultimo, una vez que estamos completamente seguros que nuestro código funciona perfectamente es cuando creamos el ejecutable, es decir nuestro programa, pues deja decirte que un programa también es un archivo de texto el cual contiene las instrucciones finales de un programa, las cuales se tiene pensado ya no sera necesario modificar de manera que se codifican enteramente en lenguaje maquina es asi que obtenemos

Código Ejecutable: es básicamente el programa final.

Si eres un usuario de windows el ejemplo mas sencillo de un código ejecutable son los archivos *.EXE.



Código de un Ejecutable visto desde un block de notas


Como podemos ver, el código final es mucho menos entendible que el código objeto, esto es debido a que se encuentra por una parte cifrado y por otra parte se encuentra escrito totalmente en  lenguaje maquina.

Compiladores y Ensambladores:

En fin, los ejemplos vistos anteriormente estan hechos con python, python es un lenguaje interpretado, es decir utiliza un interprete, el cual traduce las instrucciones a medida que estas son ingresadas.

Por otro lado, anteriormente, los primeros pioneros en la programación son los compiladores y ensambladores, ambos son considerados como traductores, esto es, traducen lo escrito en un archivo de texto a lenguaje maquina.

La principal diferencia entre compilador y ensamblador llega en el hecho de que generalmente los compiladores traducen un codigo a un lenguaje intermedio, como puede ser ensamblador, una vez que se hizo esto, se apoyan de esa traducción para tranformar el codigo a lenguaje maquina.

Por el contrario el ensamblador, lee tu codigo, te detecta errores, y si no tenemos errores traduce directamente a lenguaje maquina, es decir, hace una traducción directa.

Ambos utilizan lo que se conoce como ligadores o enlazadores, estos al traducir un formato ejecutable, generamente se topan con segmentos de codigo como las importaciones o llamadas a otros programas, es aqui donde ellos se encargan de enlazar los codigos y archivos faltantes para una correcta traducción a Lenguaje Maquina.

En resumen, el proceso que sigue un compilador o un ensamblador es:

1. El programa utiliza un editor de texto para crear un archivo de texto ASCII, conocido como archivo de código fuente.

2. El ensamblador lee el archivo de código fuete y produce un archivo de código objeto, una traducción del programa a lenguaje máquina. De manera opcional, produce un archivo de listado. Si ocurre un error, el programador debe regresar al paso 1 y corregir el programa.

3. El enlazador lee el archivo de código objeto y verifica si el programa contiene alguna llamada a los procedimientos en una biblioteca de enlace. El enlazador copia cualquier procedimiento requerido de la biblioteca de enlace, lo combina con el archivo de código objeto y produce el archivo ejecutable. De manera opcional, el enlazador puede producir un archivo de mapa.

4. La herramienta cargador (loader) del sistema operativo lee el archivo ejecutable y lo carga en memoria, y bifurca la CPU hacia la dirección inicial del programa, para que éste empiece a ejecutarse.

Comentarios