Escrita una vez, jugada en millones de móviles
Una app de un juego la escriben personas, con palabras que pueden leer. El procesador del móvil no entiende esas palabras. Solo ejecuta sus propias instrucciones, que son números.
Antes, algo tiene que traducir el juego. Hay dos formas principales de hacerlo, y en tu máquina del laboratorio puedes ver las dos.
Al terminar esta lección
Nota
Puedo explicar en qué se diferencian un compilador y un intérprete.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Código fuente | un programa tal como lo escriben las personas | hello.c |
| Código máquina | instrucciones en forma de números que ejecuta un procesador | |
| Traductor | un programa que convierte código fuente en algo que el ordenador ejecuta | |
| Compilador | un traductor que pasa todo el programa a código máquina antes de ejecutarlo | |
| Intérprete | un traductor que lee y ejecuta un programa sentencia a sentencia | |
| Token | una palabra de un programa, como un nombre, un número o un signo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Tres tipos de traductor
Un ensamblador convierte el ensamblador en código máquina, una instrucción por cada línea.
Un compilador lee primero el programa entero. Si algo está mal, para y lo dice, y no se ejecuta nada. Si todo va bien, escribe código máquina que puedes ejecutar una y otra vez.
Un intérprete lee una sentencia, la ejecuta y después lee la siguiente.
Un compilador y un intérprete, cara a cara
| Pregunta | Compilador | Intérprete |
|---|---|---|
| ¿Cuándo se traduce el programa? | Entero, antes de ejecutarse | Sentencia a sentencia, mientras se ejecuta |
| ¿Sale un archivo de programa? | Sí, y se ejecuta sin el compilador | No, hace falta el intérprete cada vez |
| ¿Cuándo se encuentra un fallo? | Antes de ejecutar nada | Al llegar a esa línea |
| ¿Qué va más rápido? | Casi siempre el programa compilado | Casi siempre más lento |
| En el laboratorio | gcc | python3 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra superior y espera a que la máquina diga que está en marcha. Cada botón Ejecutar escribe su comando en el terminal de la máquina, uno detrás de otro.
Entra en la carpeta compiler
cd ~/compilerSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Compila hello.c en un programa
gcc hello.c -o helloSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecuta el programa que hizo gcc
./helloSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Compila un programa con un fallo
gcc -Wall -c scope.cSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un intérprete encuentra el fallo tarde
gcc leyó todo scope.c y lo rechazó. No hizo ningún programa.
Ahora escribe un archivo de Python de dos líneas. La primera escribe una palabra. La segunda usa un nombre, total, al que nunca se dio un valor. Mira qué hace Python.
Escribe un archivo de Python de dos líneas
printf 'print("hola")\nprint(total)\n' > tarde.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo con el intérprete
python3 tarde.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un compilador trabaja por fases
El análisis léxico parte los caracteres en tokens y tira los espacios y los comentarios.
El análisis sintáctico comprueba los tokens con la gramática del lenguaje y construye un árbol del programa. La generación de código convierte el árbol en código máquina, y la optimización lo hace más pequeño o más rápido.
Escribe una línea de Python
echo 'print(6 * 8)' > cuenta.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pártela en tokens
python3 -m tokenize cuenta.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que un intérprete no traduce nada. Python convierte primero tu archivo en bytecode, instrucciones sencillas para su propia máquina. El siguiente Run lo enseña. Busca el 48: Python calculó 6 × 8 antes de ejecutar nada.
Enseña el bytecode
python3 -m dis cuenta.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: el analizador de calc
El calc del laboratorio es una calculadora con un analizador léxico hecho con flex y uno sintáctico hecho con bison. Pulsa Abrir el terminal, escribe make y después echo "7 @ 2" | ./calc.
Escribe dos líneas. ¿Cuál viene del analizador léxico y cuál del sintáctico? ¿Cómo lo sabes?