Cuando estamos iniciando en la programación una de las principales características que salta a la vista es si en lenguaje es interpretado o compilado. En este artículo vamos a ver que es lo que implican y en que nos pueden servir.
Compilación
Como la palabra lo dice un lenguaje que es compilado necesita un compilador si o si, este compilador podríamos decir que es el que se encarga de entender todo lo que estamos escribiendo.
Ahora nos pondremos mas técnicos, los lenguajes que necesitan de un compilador trabajan de la siguiente forma: Se escribe un archivo y normalmente con una extensión dependiendo del lenguaje, por ejemplo: archivo.c, archivo.java, etc. Este archivo necesita parar por el compilador, el compilador se encargara de leer el archivo, las cantidades de veces que se lee el archivo varia.
Existen compiladores de una pasada o de varias pasadas, esto quiere decir que algunos compiladores solo necesitan leer el archivo 1 vez, otros archivos compiladores necesitan leer los archivos 2 o más veces.
Los que leen mas de una vez el archivo lo que hacen es separar los procesos, por ejemplo: La primera vez que leen el archivo leen la sintaxis del archivo y revisan que todo este correcto para dar el OK, la segunda vez que revisan el archivo ahora revisan la lógica, por ejemplo si se utilizan indices que los indices estén correctos o los accesos a los diversos elementos, estas son solamente algunas cosas que puede hacer en esas pasadas.
Poniendo este artículo un poco más técnico, dentro de la compilación o también llamado proceso de compilación vamos a encontrar normalmente 2 elementos:
- Analizador lexicográfico.
- Analizador sintáctico/semantico.
Analizador lexicográfico
El analizador lexicográfico se conoce como la primera fase del proceso de compilación, lo que hace este analizador es leer una secuencia de caracteres y dependiendo de la secuencia que lee genera tokens, estos tokens son los que se utilizan en la otra fase que es el analizador del analizador sintáctico, así que podemos decir que la salida del analizador lexicográfico es la entrada del analizador sintáctico.
Un ejemplo de esto sería así: Supongamos que leemos un archivo de Java, cuando se lee una secuencia de caracteres que dice class, new, extends y este tipo de palabras que conocemos como palabras reservadas se lanzaría un token que dice palabra reservada, esa es una de las razones del por que al nombrar una variable, función o clase no podemos usar una palabra reservada, no será permitido ya que están reconocidas como una secuencia de caracteres con un fin ya definido por el lenguaje.
Las palabras reservadas ya tienen un token definido, pero también existen tokens para cuando encontramos operadores: +, -, /, y ademas cuando encontramos ciclos y los elementos que ya tenemos definidos en cada uno de los lenguajes.
Analizador sintáctico
Un analizador sintáctico puede ser algo que ya conozcas y hasta haberlo usado, pero que simplemente no lo ubicas con este nombre, al analizador sintáctico también se le conoce como Parser. Normalmente ubicamos los parser como el código que nos permite leer datos que que nos llegan desde un servidor con una determinada estructura y dependiendo de esa estructura recibimos y tratamos los datos.
El objetivo del analizador sintáctico es que la entrada que recibe la convierte en estructuras que más adelante van a servir de una manera más sencilla para leer y analizar cosas como la jerarquía y secuencia, normalmente una de las estructuras usadas en este proceso es la de árbol.
Fin de compilación
Al final del proceso que se conoce como compilación lo que obtenemos como resultado es un archivo que es un ejecutable y ese archivo es el que finalmente se comportara como un programa, es decir le damos doble click o ejecutamos la tarea y comienza con la ejecución de las instrucciones.
Además de generar un archivo que se conoce como ejecutable los compiladores generan un segundo archivo al que se le conoce como código objeto, este archivo contiene lenguaje máquina o bytecode, en algunas ocasiones no solamente se tiene un archivo de código objeto, se pueden tener varios archivos de código objeto.
Interpretración
El intérprete podemos decir que tiene un proceso mucho más sencillo, el intérprete lo que hace es leer el archivo y hacer la traducción(interpretar) lo que entiende, normalmente lo hace linea por linea. Con esto podemos decir que se comporta como un intérprete en verdad, las personas que están durante la transmisión de un evento deportivo, un debate o una entrega de premios y que escucha lo que dice la persona y va interpretando conforme lo va entiendo.
Además los intérpretes no generar archivos para almacenar el resultado de lo que se traducido. Como podemos leer es mucho más sencillo de describir.
Características de lenguajes compilados e interpretados.
Ahora vamos a ver cuales son algunas de sus características:
- Los lenguajes compilados muy raro van a poder generar programas multiplataforma.
- Los lenguajes compilados son menos flexibles que los lenguajes interpretados.
- Los lenguajes compilados generar un archivo ejecutable del que ya no tenemos que preocuparnos, simplemente ejecutar.
- Cuando arreglamos un error en un lenguaje compilado tendremos que volver a compilar el programa para que el ejecutable se vuelva a generar con los cambios.
- Los lenguajes interpretados son normalmente multiplataforma, cada S.O. tiene su intérprete del lenguaje.
- Cada que vamos a ejecutar un programa que es de un lenguaje interpretado tendremos que interpretar el archivo, el programa compilado ya está listo para funcionar por eso es más rápido.
Tengo el honor de escribir un artículo semanal para EDteam así que si tienes alguna sugerencia de tema o comentarios puedes dejarlo aquí mismo o hacérmelo llegar por: