Páginas

miércoles, 8 de febrero de 2012

[Emb Comp Lab] Lenguajes de Alto y Bajo Nivel

¿Cómo decirle a las computadoras qué deben hacer, cuándo deben hacerlo y cómo deben hacerlo?

Es una pregunta que en nuestros días ya no es difícil responder, al igual que nosotros nos comunicamos por medio de un lenguaje, las computadoras también se "comunican" con nosotros por medio de un lenguaje.

Las computadoras solo entienden un solo lenguaje, el conocido código binario (0 y 1); para nosotros los humanos es sumamente complicado comunicarnos de es manera, es por ello que nos vimos en la tarea de crear "traductores" que nos permitieran hablar con las computadoras, los lenguajes de programación.

Lenguajes de Programación



"Un lenguaje de programación es un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones, y es utilizado para controlar el comportamiento físico y lógico de una máquina."

Un lenguaje de programación permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo estos datos deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico.

Los lenguajes de programación se pueden clasificar atendiendo a varios criterios, los principales son:
  • Según el nivel de abstracción
  • Según la forma de ejecución
  • Según el paradigma de programación que poseen cada uno de ello

Nos centraremos en la primera clasificación, Nivel de Abstracción

ABSTRACCIÓN: es un mecanismo y una práctica de reducir los detalles del factor hacia fuera de modo que uno pueda centrarse en algunos conceptos a la vez. Con la abstracción nos referimos a centrarnos cada vez mas en ciertos factores de la programación, dejando otros para que la maquina se haga cargo de ellos directamente.

Lenguajes de Bajo Nivel


Los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras provenientes del inglés; éste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). El lenguaje ensamblador sigue la misma estructura del lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números.
La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones"

Son lenguajes totalmente dependientes de la máquina y estan prácticamente diseñados a la medida del hardware para aprovechar al máximo las características del mismo. Es por ello que el programa que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras maquinas, ya que cada microcontrolador, microprocesador, chip, etcétera, tiene su propia arquitectura y su propio set de instrucciones y caracteristicas de memoria.
Dentro de este grupo se encuentran:

  • Lenguaje Máquina: este lenguaje ordena a la máquina las operaciones fundamentales para su funcionamiento. Cnsiste en la combinación de 0's y 1's para formar las ordenes entendibles por el hardware de la maquina. Este lenguaje es mucho más rápido que los lenguajes de alto nivel. La desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente enormes donde encontrar un fallo es casi imposible. 
  • Lenguaje Ensamblador: es un derivado del lenguaje maquina y esta formado por abreviaturas de letras y números llamadas mnemotécnicos. Con la aparición de este lenguaje se crearon los programas traductores para poder pasar los programas escritos en lenguaje ensamblador a lenguaje máquina. Como ventaja con respecto al código máquina es que los códigos fuentes eran más cortos y los programas creados ocupaban menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y mantener. 

Pros


  • Adaptación: Máxima entre programación y aprovechamiento del recurso de la máquina.
  • Velocidad: Máxima al contar con un acceso directo a los recursos, sin capas intermedias.

Contras

  • Portabilidad: Mínima por estar restringido a las especificaciones del fabricante.
  • Abstracción: Mínima por depender completamente de la técnica del hardware.
  • Uso: Requiere de la máxima atención y de una organización estructurada en base a los planos del hardware y del objetivo del software.
  • Se trabaja a nivel de instrucciones, es decir, su programación es al más fino detalle.
  • Está orientado a la máquina.
  • El programador debe conocer más de un centenar de instrucciones.
La programación en un lenguaje de bajo nivel tiene como ventajas una mayor adaptación al equipo, además de la posibilidad de obtener la máxima velocidad con el mínimo uso de memoria. Sin embargo tiene importantes inconvenientes, como la imposibilidad de escribir código independiente de la máquina y la mayor dificultad en la programación y en la comprensión de los programas

Lenguajes de Alto Nivel


Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una máquina a otra sin ningún tipo de problema.

Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la maquina/s para la que están diseñando el programa. Tan solo necesitan un traductor que entiendan el código fuente como las características de la maquina.
Suelen usar tipos de datos para la programación y hay lenguajes de propósito general (cualquier tipo de aplicación) y de propósito especifico.

Están dirigidos a solucionar problemas mediante el uso de EDD's.

EDD [Estructuras Dinámicas de Datos]: Son estructuras que pueden cambiar de tamaño durante la ejecución del programa. Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un programa.

Dentro de este grupo se encuentran:
  • BASIC, COBOL, FORTRAN, PASCAL
  • C, C++, C#, Objective-C
  • LISP, PROLOG
  • Java, Python, Perl
Entre muchos otros, que ya conocemos.

Ventajas

  • Genera un código más sencillo y comprensible.
  • Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos.
  • Reducen en gran medida la cantidad de horas hombre para programar.

Inconvenientes

  • Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.
  • Algunos requieren que la máquina cliente posea una determinada plataforma, compilador, librerías, etcétera.

Comparación



Un ejemplo para comprender la diferencia entre los lenguajes de alto nivel y los lenguajes de más bajo nivel es: un lenguaje de bajo nivel está más cerca de las características de un lenguaje tipo máquina en particular, y más alejado de poder ser comprendido por un humano. Cuanto más alto es el nivel del lenguaje, más sencillo es comprenderlo y utilizarlo.

Existe también una estrecha relación entre las sentencias en lenguaje de alto nivel y sus formas en lenguaje máquina codificada (lenguaje de bajo nivel). La principal diferencia aquí es que en los lenguajes de alto nivel se utilizan símbolos como: `X', `Y', `Z', `A', etc para “sumar”, `M' para “multiplicar”, etc; mientras que en un lenguaje ensamblador o máquina se requieren códigos numéricos del estilo: OC1A4, AV7J9, etc, para que sea comprensible por la máquina.

La programación en un lenguaje de alto nivel requiere, por tanto, algún tipo de interfaz con el lenguaje máquina para que el programa pueda ejecutarse. Las interfaces más comunes son: un “compilador”, y un “intérprete”. El compilador traduce el programa a otro equivalente en el lenguaje `X' de la máquina “residente” como un paso separado antes de la ejecución del programa, en cambio, el intérprete ejecuta directamente las instrucciones en un lenguaje `Y' de alto nivel, sin un paso de procesamiento previo.

La compilación es, en general, un proceso más eficiente que la interpretación en la mayoría de los tipos de máquina, esto se debe principalmente a que las sentencias dentro de un “bucle” deben ser reinterpretadas cada vez que se ejecutan por un intérprete, con un compilador, cada sentencia es interpretada y luego traducida a lenguaje máquina solo una vez.

Normalmente la interpretación es preferible a la compilación en un entorno de programación experimental o de educación, donde cada nueva ejecución del programa implica un cambio en el propio texto del programa. La calidad de diagnóstico y depuración que soportan los lenguajes interpretados es generalmente mejor que la de los lenguajes compilados, puesto que los mensajes de error se refieren directamente a sentencias del texto del programa original.

Referencias

1 comentario: