Introducción a la Estructura de los Lenguajes

09/09/2010

Lo que sigue es un resumen de algunos de los conceptos fundamentales relacionados con la asignatura “Estructura de los Lenguajes” que enseño en la Facultad Politécnica de la Universidad Nacional de Asunción. Este post va dedicado a mis alumnos.

Lenguaje de programación

Un lenguaje, en su sentido natural, es un método humano, no instintivo, que sirve para comunicar ideas, emociones y deseos mediante un sistema de símbolos producidos voluntariamente.

Un lenguaje, en su sentido formal, es aquel que tiene una gramática que consta de un vocabulario de símbolos, reglas sintácticas (combinaciones) y reglas semánticas (significado).

El lenguaje, en general, es entonces un conjunto de objetos (vocabulario) capaces de ser combinados de acuerdo a ciertas reglas (gramática) con el fin de comunicarse con un receptor.

Un lenguaje de programación es un subconjunto de los lenguajes formales que le permite al ser humano comunicarse con una computadora (receptor) para indicarle a ésta qué es lo que debe hacer.

Se puede considerar a un lenguaje de programación como una capa de abstracción que le protege al ser humano (programador) de las complejidades o particularidades de la computadora. Esa capa le presenta al programador una máquina virtual que le resulta mucho más fácil de comprender que la máquina real.

Lenguaje de máquina

El lenguaje de máquina es un sistema de instrucciones que pueden ser ejecutadas directamente por una unidad central de procesamiento (microprocesador). Se lo considera un lenguaje de programación primitivo e incómodo, por estar basado directamente en la lógica digital y por no haber un único lenguaje de máquina, sino que cada arquitectura de hardware cuenta con el suyo.

El código máquina a veces se denomina código nativo, por haber partes que dependen de una plataforma de hardware en particular. No debe confundirse al código máquina con bytecode (código de bytes) ya que este último es un código intermedio que se ejecuta a través de un intérprete, no directamente por la CPU.

Para que un programa escrito en un lenguaje de programación “humano” (de alto nivel) pueda ser ejecutado, éste debe convertirse a código máquina mediante un programa traductor que funciona como intérprete (traduce y ejecuta cada instrucción) o compilador (traduce y guarda las instrucciones en código máquina en un archivo nuevo).

Código binario

El código binario es el sistema de representación de instrucciones y datos que utiliza un dispositivo electrónico. Se basa en el sistema de numeración binario (de dos dígitos, “0” y “1”) que representan los dos únicos niveles de tensión que usan los circuitos electrónicos.

La unidad básica de información del código binario es el bit (binary digit) que es una variable cuyo valor almacenado puede representar sólo a uno de dos posibles estados: encendido/apagado, verdadero/falso, sí/no, etc.

El código binario puede representar cualquier tipo de información, por ejemplo la letra minúscula “a” está representada por la cadena de bits “01100001” que tiene un valor decimal de 97.

Ensamblador

El término “ensamblador” puede referirse a un programa especial o a un lenguaje de programación (Assembly). El Assembly es un tipo de lenguaje de bajo nivel (cercano al hardware) que permite una representación un poco más abstracta de las instrucciones en código máquina.

El programa ensamblador es capaz de leer un archivo con instrucciones escritas en lenguaje Assembly (ensamblador) y traducirlas a código máquina, para posteriormente almacenarlas en un nuevo archivo, denominado objeto o ejecutable.

Los ensambladores fueron creados para facilitar la escritura de programas en código máquina, ya que hacerlo en código binario resulta muy complicado para el ser humano.

Arquitectura del conjunto de instrucciones

Del inglés “Instruction Set Architecture” (ISA) es una especificación que detalla las instrucciones que una CPU en particular puede interpretar y ejecutar.

ISA es la parte de la arquitectura de hardware relacionada con la programación, e incluye los tipos de datos, instrucciones, registros, modos de direccionamiento, arquitectura de memoria, interrupciones y manejo de excepciones.

Máquina virtual

Una máquina virtual es una implementación en software de una máquina real o física (hardware). Dicha máquina virtual debe poder ejecutar órdenes diseñadas para la máquina real.

Lo que comúnmente se entiende por máquina virtual es lo que en términos técnicos más específicos se conoce como máquina virtual de sistema, que permite compartir los recursos físicos (hardware) entre distintas máquinas virtuales, cada una de ellas funcionando sobre su propio sistema operativo.

Los lenguajes de programación pueden considerarse máquinas virtuales de un tipo especial, denominado máquina virtual de proceso o de aplicación, debido a que funcionan sobre un sistema operativo y soportan un único proceso.

Un lenguaje de programación provee al programador de un entorno de desarrollo independiente de la plataforma (hardware + sistema operativo) lo que al menos en teoría permite que un mismo programa funcione en cualquiera de ellas.

Paradigmas de la programación

La palabra “paradigma” proviene del griego y significa algo así como “demostración de un modelo”. Un paradigma de programación es un conjunto de métodos sistemáticos aplicables en el diseño de programas, basados en un modelo de definición y operación de la información.

Los paradigmas de programación se diferencian entre sí por los conceptos, abstracciones y pasos que usan para representar los elementos de un programa.

Los paradigmas de programación más comunes son:

  • Imperativo: Basado en una secuencia de comandos.
  • Declarativo: Expresa la lógica de la computación, sin describir su flujo de control.
  • Funcional: (Subparadigma de Declarativo) Basado en la evaluación de funciones matemáticas.
  • Estructurado: (Subparadigma de Imperativo) Dividir el programa en secciones independientes.
  • Orientado a objetos: (Subparadigma de Imperativo) Los datos incluyen los métodos que los usan.

2 Responses to Introducción a la Estructura de los Lenguajes

  1. [...] This post was mentioned on Twitter by Eliseo Ocampos, Carlos Zayas G.. Carlos Zayas G. said: carloszayas.com Introducción a la Estructura de los Lenguajes http://bit.ly/cH1r9Z [...]

  2. josesitomal on 18/11/2010 at 09:26

    Buenas Prof. Ayer descubrí su blog de la mano de “Notas de Samuel” y quede fascinado, de hecho soy alumno de la Carrera de Análisis de sistemas en la FP-UNA (la mejor) y me encantaría ser alumno suyo. Siga así por favor, que lo estaré visitando a menudo. FOSS for life!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Get Adobe Flash playerPlugin by wpburn.com wordpress themes