Entendiendo los Lenguajes de Programación

Los lenguajes de programación, forman parte del grupo de lenguajes informáticos. Ampliamente, puede decirse que un lenguaje informático es un idioma artificial, utilizado por ordenadores, cuyo fin es transmitir información de algo a alguien. Los lenguajes informáticos, pueden clasificarse en:

  • lenguajes de programación (Python, PHP, Perl, C, etc.);
  • lenguajes de especificación (UML);
  • lenguajes de consulta (SQL);
  • lenguajes de marcas (HTML, XML);
  • lenguajes de transformación (XSLT);
  • protocolos de comunicaciones (HTTP, FTP); entre otros.

Mientras que algunos lenguajes informáticos como (X)HTML o CSS, han sido diseñados para diagramar y decidir la forma en la cual la información será presentada al usuario, los lenguajes de programación, tienen como fin, expresar órdenes e instrucciones precisas, que deben ser llevadas a cabo por una computadora para realizar una o más tareas específicas. Se utilizan para crear programas que controlan el comportamiento físico o lógico de un ordenador. Están compuestos por una serie de símbolos, reglas sintácticas y semánticas que definen la estructura del lenguaje.

Lenguajes de Programación según su nivel de abstracción
En un primer estado de clasificación, los lenguajes de programación se dividen según su nivel de abstracción, en lenguajes de bajo nivel, lenguajes de medio nivel y lenguajes de alto nivel, dependiendo de su grado de “cercanía al hardware”.

Cuanto más cercano al hardware se encuentra el lenguaje, más bajo nivel posee éste. Mientras que cuanto más acercado al usuario se encuentre, más alejado del hardware estará y, en consecuencia, de mayor nivel será el lenguaje.

Lenguajes de Programación de Bajo Nivel
Los lenguajes de bajo nivel, son aquellos que dependen intrínsecamente del ordenador. Aquellos programas informáticos, programados con lenguajes de bajo nivel, al ser exclusivamente dependientes del hardware, no pueden migrarse, ya que están justamente diseñados, para un hardware específico.

Existen dos tipos de lenguajes de bajo nivel: el lenguaje máquina y el lenguaje ensamblador.

El lenguaje de máquina (también denominado lenguaje de primera generación) es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata . Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones de lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas[0].

Función en 32-bits en código de maquina x86, para calcular el enésimo número de la serie de Fibonacci[1]

Un lenguaje ensamblador, o assembler (assembly language) es un lenguaje de programación de bajo nivel para los ordenadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos[2] que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto, específico a cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que, idealmente son portables[3].
Este lenguaje, también es conocido como lenguaje de segunda generación.

Ejemplo desarrollado en lenguaje ensamblador que usa llamadas de MS-DOS (system calls) para imprimir el mensaje Hola mundo!! en pantalla. Extraído de http://homepage.mac.com/eravila/asmix862.html (para ver la explicación detallada del ejemplo, seguir el enlace anterior)

Para ampliar la información sobre los lenguajes de bajo nivel, puede leerse el siguiente artículo de Karmany.net.

También es recomendable, leer el siguiente artículo sobre Lenguaje Ensamblador en Wikipedia.

Lenguajes de Programación de Medio Nivel
La clasificación de lenguajes de programación, mediante un nivel de abstracción medio, es bastante discutible. Personalmente sostengo sólo por dos niveles de abstracción: bajo nivel y alto nivel. Sin perjuicio de ello, se plasmarán aquí, aquellos argumentos sostenidos, por quienes aceptan este tercer nivel de clasificación.

Quienes sostienen la clasificación de lenguajes de programación medio, argumentan que éstos, son aquellos lenguajes que se encuentran, justamente, entre los de bajo nivel y los de alto nivel, ya que poseen características que permiten interactuar directamente con el sistema. Un ejemplo de ello, sería el lenguaje C, el cual puede trabajar (entre otras características) con direcciones de memoria.
Sin embargo, dicho acceso, no es efectuado de forma directa (a través de lenguaje máquina o ensamblador), sino que requiere ser “traducido” previamente por su compilador. Por dicha razón, es que asumo a C como lenguaje de alto nivel y descarto la clasificación de lenguajes de medio nivel.

Suele colocarse como ejemplo de lenguaje de programación de medio nivel, anterior a C, a BCPL[4], diseñado para escribir Sistemas Operativos y Compiladores.

Ejemplo de código BCPL para impresión de factoriales[5]

Lenguajes de Programación de Alto Nivel
Los lenguajes de alto nivel, son aquellos cuya característica principal, consiste en una estructura sintáctica y semántica legible, acorde a las capacidades cognitivas humanas. A diferencia de los lenguajes de bajo nivel, son independientes de la arquitectura del hardware, motivo por el cual, asumen mayor portabilidad.

Son ejemplo de lenguajes de alto nivel: Python, Perl, PHP, Ruby, Lisp, Java, Fortran, C++, C#, entre otros.

Archivo: hola_mundo.py . Imprime Hola Python! En pantalla

Archivo: hola_mundo.php . Imprime Hola PHP! En pantalla

Archivo: hola_mundo.pl . Imprime Hola Perl! En pantalla

Hola Mundo en otros lenguajes (para curiosos): www.holamundo.es

Clasificación de Lenguajes de programación, según su forma de ejecución
Según su forma de ejecución, los lenguajes de programación pueden ser: compilados o interpretados.

Los lenguajes de programación compilados, son lenguajes de alto nivel que requieren que las instrucciones (código fuente del programa), sean traducidas a lenguaje máquina por un compilador, a fin de generar un ejecutable del programa. Ejemplo de lenguajes compilados son Pascal, C, C++, Ada, entre otros.

Ejemplo en C que imprimirá “Hola mundo” en pantalla tras ser compilado.

Mismo ejemplo, pero en Pascal.

Los lenguajes interpretados, a diferencia de los compilados, no requieren de un compilador para ser ejecutados sino de un intérprete. Un intérprete, actúa de manera casi idéntica a un compilador, con la salvedad de que ejecuta el programa directamente, sin necesidad de generar previamente un ejecutable. Ejemplo de lenguajes de programación interpretado son Python, PHP, Ruby, Lisp, entre otros.

Ejemplo de código Lisp que imprime “Hola Mundo!” en pantalla

Es importante además, hacer notar que la mayoría de los lenguajes de programación, puede ejecutarse tanto de modo compilado como interpretado.

[0] Fuente: http://es.wikipedia.org/wiki/Lenguaje_m%C3%A1quina
[1] Fuente: http://en.wikipedia.org/wiki/Low-level_programming_language
[2] En informática, un mnemónico es una palabra que sustituye a un código de operación (lenguaje de máquina), con lo cual resulta más fácil la programación, es de aquí de donde se aplica el concepto de lenguaje ensamblador. Fuente: http://es.wikipedia.org/wiki/Mnem%C3%B3nico
[3] Fuente: http://es.wikipedia.org/wiki/Lenguaje_ensamblador
[4] Ver manual de Referencias de BCPL
[5] Fuente: http://en.wikipedia.org/wiki/BCPL#Examples

eugeniabahit

GLAMP Hacker espcializada en Ingeniería Inversa de Código sobre entornos GNU/Linux. Programadora eXtrema con enfoque en TDD, Python, PHP y Shell Scripting. Miembro de la Free Software Foundation, de la Linux Foundation y parte del equipo de Debian Hackers.

27 thoughts on “Entendiendo los Lenguajes de Programación

  1. Bueno, muchísimas gracias a todos por los mensajes y por el gran intercambio de ideas. Sin dudas, son estas cosas, las que ayudan a enriquecer nuestros conocimientos :)

Comments are closed.