jueves, 14 de abril de 2011

Niveles de programación

Como mencionaba en el articulo Introducción a la programación, los lenguajes de programación se deben traducir a lenguaje maquina para que el computador pueda interpretarlos y ejecutarlos. Sin embargo existen variantes entre los lenguajes maquina, y estas variantes debían tenerse en cuenta en los primeros lenguajes de programación que fueron desarrollaron. A este conjunto de lenguajes de programación que implican que el programador (la persona que escribe el programa) conozca ciertas características del computador para el cual se escribe el programa. Estos lenguages se llaman de bajo nivel, ya que tienen una equivalencia estricta con el lenguaje maquina.

Por otro lado existen los lenguajes de alto nivel, los cuales nos permiten escribir programas de forma independiente a la maquina en se van a ejecutar. Por ultimo los lenguajes mixtos son aquellos que nos permiten ignorar los detalles como en los lenguajes de alto nivel, pero si queremos podemos tomar el control de estos detalles como en los lenguajes de bajo nivel.

Un ejemplo de un lenguaje de bajo nivel es el lenguaje Ensamblador (Assembler en inglés), un ejemplo de un lenguaje de alto nivel es C#, y por ultimo C++ es un típico lenguaje mixto.

Forma de interpretación

Existen dos formas en las que un computador puede entender un lenguaje de programación:

  1. la primera es mediante una traducción total del lenguaje de programación al lenguaje maquina especifico de la maquina, a esta técnica le llamaremos código nativo. Cuando se utiliza código nativo no hay garantía de que el programa al copiarse a otro computador siga funcionando. Sin embargo conseguimos el mejor desempeño en las maquinas donde funciona.
  2. Luego del código nativo, la siguiente opción es mediante un programa auxiliar que traduce del lenguaje de programación u otro lenguaje intermedio al lenguaje maquina en tiempo real mientras se ejecuta, esto tiene la desventaja de que es más lento que el código nativo. Pero esta tecnica permite transportar al programa a otras plataformas sin mayores complicaciones (se dice que el programa es portable a otras plataformas, o simplemente portable).

    En esta segunda técnica hay dos variantes:

    1. En la primera variante el programa se encuentra en el lenguaje original en que fue escrito y no se verifica si es correcto hasta que debe ejecutarse, a esto se le llama código interpretado, el cual como es evidente es poco seguro, ya que no hay garantía de la integridad del programa (garantía de que no se ha dañado).
    2. La segunda alternativa es traducir el lenguaje de programación a un lenguaje intermedio que es más fácil de traducir a lenguaje de máquina, se trata también de comprobar si el programa es correcto antes de empezar a correr. De esta manera el programa se ejecuta más rápido y más seguro que el código interpretado, ello exigirá el código manejado. El código manejado asegura la integridad del programa, sin embargo es posible que el lenguaje intermedio aun sea de alto nivel y por tanto necesite otra iteración de traducción. Esta segunda traducción suele ser interpretada debido a que la integridad del programa ya ha sido verificada, cuando se realiza esta combinación de técnicas sigue siendo código manejado, pero si dice es compilado "justo a tiempo" (Just In time en inglés).

Ejemplos de lenguajes de programación comúnmente compilados a código nativo son: Assembler y C++, por otro lado Java y C# son código manejado en la mayoría de los casos, un ejemplo de código interpretado (aunque es posible que no lo sea) es JavaScript. Una situación en la cual JavaScript no es interpretado es con la maquina virtual V8 que utiliza Google Chrome, gracias a esta maquina virtual JavaScript se ejecuta como código manejado. Además hay herramientas que permiten compilar lenguajes que comúnmente son manejados a código nativo.

No hay comentarios:

Publicar un comentario