add 2

miércoles, 18 de diciembre de 2013

¿Cómo dice que dijo?

Bueno, retomando un poco el tema de los lenguajes de programación, que ya dijimos para que servían, pero ahora hablaremos de dos vertientes en que se podrían clasificar de forma general y sin entrar en muchos detalles. Lenguajes compilados y lenguajes interpretados. Para aquellos que expresaron lo que dice el título de la entrada veamos con mas calma este asunto. Aunque esta clasificación hoy en día no es tan crítica, aún tiene cierta validez.

Hay que recordar que el mundo de la computación hoy en día es muy diferente a como era hace 20 o 30 años, y seguramente lo será a como es hoy en 20 años más. Esta clasificación cobraba mucho mayor importancia por esa época y anteriores, cuando la potencia de los equipos no era tanta como la actual, y había que exprimirle el mayor rendimiento posible. Hay que recordar que la computadora solo entiende lenguaje binario, o lenguaje máquina, que es una secuencia de 0 y 1 que le van dictando los datos a utilizar y que hacer con ellos, así que todo programa que haga una persona, se debe convertir a este lenguaje.


La forma en como se convierte es lo que hace esta clasificación. En los lenguajes interpretados, cada vez que se ejecuta el programa, se va convirtiendo el programa del código fuente que escribe el usuario, al código máquina que entiende la máquina, línea por línea, mientras que en un lenguaje compilado, todo se traduce de golpe una única vez, y cada vez que se ejecuta el programa lo hará ya directamente en código máquina.

Estas dos vertientes tienen sus puntos a favor y en contra. El más evidente es la velocidad del programa, los compilados son más rápidos ya que directamente trabajaran sobre el procesador, mientras que en los interpretados se consume tiempo en la traducción en cada ejecución. Como comentaba, este detalle hoy en día no pesa tanto, dado la potencia del hardware actual, pero aún es válida. A su vez, un lenguaje compilado se hace para un tipo de procesador en particular, por lo que su desempeño se verá beneficiado contra un interpretado, que no toman en cuenta nada del hardware en particular, así que está el detalle de lo genérico contra lo especializado. Este punto tiene el reverso de la moneda, un programa compilado esta casado con el tipo de hardware para el que se compiló y no se puede utilizar en uno distinto, un interpretado en cambio puede utilizarse en distintos tipo de hardware, solo basta tener el intérprete adecuado para cada tipo.

Otra característica que también tiene pros y contras para ambos lados es el hecho de que un lenguaje compilado tiene una revisión mucho más estricta ya que como se traduce todo de golpe debe de ir todo bien hecho sin errores en la construcción de las sentencias y datos que va a manejar el programa, y se maneja política de todo o nada al momento de la compilación por lo que los bugs están mejor controlados, en los interpretados como va línea por línea, es más probable que se cuelen errores ya que el programa se ejecutará hasta llegar al momento del error, lo que puede provocar resultados inesperados y molestos.

El otro lado es que los compilados son demasiados rígidos, y no se puede "improvisar" sobre la marcha por lo que prácticamente se debe de conocer como debe comportarse el programa en su totalidad y preveer todos los posibles puntos que pueden dar problemas, en los interpretados, se tiene cierta flexibilidad con las instrucciones que pueden "torear" algunas situaciones no previstas y seguir adelante.

Un par de ejemplos muy fáciles de encontrar del empleo de estos lenguajes sería, para un lenguaje interpretado, el uso cotidiano del internet en la web, cada página esta codificada en un lenguaje interpretado llamado html, en ocasiones la página no carga bien y sale con las partes chuecas, esto es cuando alguna parte del código falló, lo demás sigue ejecuntandose y por eso vemos la página así. Para un lenguaje compilado, cualquier videojuego nos puede servir, si algo sale mal, generalmente la pantalla se congela y no nos queda otra que reiniciarlo si es en una consola o "matar" el proceso si es en la PC.

Ya para terminar, como suele suceder en el mundo de la computación, cuando hay dos tendencias en apariencia opuestas, sale una tercera que usa algo de las dos. Hay algunos lenguajes modernos, como Java como más claro ejemplo, que funcionan con ambas tendencias, primero el código fuente que se genera es compilado a un nivel intermedio que ni es código fuente ni código máquina para ponerlo en términos simples, y este código resultante se interpreta cada vez que se ejecuta el programa, lo que permite agilizar un poco el proceso de la interpretación y también permite la portabilidad de los lenguajes interpretados, ya que nos podemos llevar nuestro programa y solo basta instalar el interprete correspondiente para cada destino (Win, Linux o Apple).

Bueno, esto fue una rápida vista a otro aspecto con los que me toca lidiar en mi chamba.




2 comentarios:

Related Posts with Thumbnails