Вы находитесь на странице: 1из 8

Captulo 2 (E. Pratt) Cuestiones de diseo de lenguajes.

2.1 La estructura y operacin de una computadora.


Una computadora es un conjunto de algoritmos y estructuras de datos, capaz de almacenar y ejecutar programas. Se puede construir a partir de dispositivos fsicos reales (computadora hardware) o a travs de software que se ejecuta en otra computadora (simulada por software o mquina virtual). Se compone de seis partes: 1. Datos: los tipos de datos elementales y estructurales que puede manipular. 2. Operaciones primitivas: para la manipulacin de datos. 3. Control de secuencia: mecanismo para determinar el orden en que se van a ejecutar las operaciones primitivas. 4. Acceso a datos: mecanismos para controlar los datos que se suministran en la ejecucin de cada operacin. 5. Gestin de almacenamiento: mecanismos para controlar la asignacin de almacenamiento para programas y datos. Responde al principio de Mantener la PC ocupada tanto como sea posible. 6. Entorno de operacin: mecanismos para la comunicacin con un entorno externo que contiene programas y datos que se van a procesar.

2.1.1 La computadora Hardware


Se trata de una memoria principal (que contiene programas y datos que se van a procesar). El procesamiento est a cargo de un intrprete que toma cada instruccin del lenguaje de mquina y la decodifica para llamar a la operacin primitiva correspondiente con los operandos designados como entrada. Estas primitivas manipulan los datos e la memoria principal y en registros internos y pueden comunicarse con el entorno de operacin externo. En detalle: 1. Datos: ciertos tipos de datos integrados (enteros, reales de precisin nica, cadenas de caracteres, etc.). 2. Operaciones: es el conjunto de operaciones primitivas como las aritmticas para cada tipo de dato numrico, primitivas para controlar las propiedades de elementos de datos, de control de secuencia, de control de dispositivos de E/S, etc. 3. Control de secuencia: el mecanismo de control de secuencia se basa en el famoso PC o Contador de Programa que vimos en arquitectura. 4. Acceso a datos: son medios para designar operandos y para recuperar operandos, adems de permitir guardar resultados de alguna primitiva en alguna localidad designada.

5. Gestin de almacenamiento: Se basa en el principio de Mantener a la PC siempre en operacin. Se implementa media los pipelines, multiprocesadores y multiprogramacin. 6. Entorno de operacin: es el conjunto deperifricos de almacenamiento y E/S. Se subdividen en: A) De alta velocidad: memorias extendidas, etc. B) De velocidad media: discos magnticos, CD-ROM, etc. C) De baja velocidad: lectores, impresoras, etc.

2.1.2. Computadoras de firmware.


Los lenguajes de mquina no estn restringidos a ser de bajo nivel. Un lenguaje de mquina podra ser Pascal, C o Fortran. El problema que conllevara, es un hardware para implementarlo mucho ms complicado y caro que si fuese un lenguaje de bajo nivel, a tal punto que el costo de esa implementacin no se justifica. Pero se basa en el principio de Cualquier algoritmo o estructura de datos definida con precisin puede ser producida en hardware. Una alternativa comn a la produccin estricta en hardware en una computadora, es la computadora de firmware, simulada por un microprograma que se ejecuta en una computadora micro programable de hardware especial. Consiste en un conjunto de microinstrucciones de nivel extremadamente bajo que, generalmente, especifican unas simples transferencias de datos entre: a) Memoria principal y registros internos. b) Registros entre si. c) Registros y otros registros a travs de procesadores como sumadores, restadores, etc. Esta simulacin de una computadora por microprograma es igual, en concepto, que la tcnica de simulacin por software, pero con la diferencia de que las velocidades de ejecucin son comparables con la produccin directa en hardware.

2.1.3. Traductores y computadoras simuladas por software.


Para ejecutar programas, existen dos soluciones bsicas: 1. Traduccin (compilacin): Traducir programas en lenguaje de alto nivel (lenguaje fuente) a programas equivalentes de lenguaje de mquina de la computadora real (lenguaje objeto). a. Un ensamblador: su lenguaje objeto es una variedad de lenguaje de mquina, pero su lenguaje fuente es un lenguaje ensamblador: una representacin simblica del cdigo de mquina objeto. Casi todas las instrucciones de traducen una a una. b. Un compilador: su lenguaje fuente es un lenguaje de alto nivel y su lenguaje objeto es un lenguaje que se aproxima al lenguaje de mquina de una computadora real, generalmente algn tipo de ensamblador.

c. Un cargador o editor de vnculos: Su lenguaje objeto es un cdigo de mquina real y su cdigo fuente es casi igual y est compuesto de programas en lenguaje mquina en forma re-ubicable junto con unas tablas de datos que especifican los puntos en los que el cdigo reubicable se debe modificar para volverlo realmente ejecutable. d. Un preprocesador o macro procesador: su lenguaje fuente es una forma ampliada de un lenguaje de alto nivel, y su lenguaje objeto es la forma estndar del mismo lenguaje. La traduccin de un lenguaje de alto nivel a un ejecutable, suele implicar ms de un paso de traduccin. 2. Simulacin de software (interpretacin): es una alternativa a la traduccin, se puede simular un programa a travs de programas ejecutados en una computadora anfitrin, una computadora cuyo lenguaje de mquina sea el lenguaje de alto nivel. Se construye una conjunto de programas en el lenguaje mquina de la computadora anfitrin que representan los algoritmos (y estructuras de datos) necesarios para la ejecucin de programas en el lenguaje de alto nivel. El procedimiento de ejecucin, es similar al realizado por hardware: se decodifica cada instruccin y se lleva a cabo cada enunciado del programa de entrada. Se dice que el traductor procesa los enunciados en el orden fsico de entrada, mientras que el simulador lo hace siguiendo el flujo lgico a travs del programa. La traduccin y la simulacin constituyen dos extremos. En la prctica esto difcilmente ocurre as. Generalmente un lenguaje se implementa en una computadora a travs de una combinacin de traduccin y simulacin. Primero se traduce su forma original en una de ms simple ejecucin. Es mejor traducir ciertos aspectos de la estructura de un programa a formas ms sencillas mientras que para otros aspectos es preferible dejarlos en su forma original y slo procesarlos segn se requiera en la ejecucin. La ventaja de un traductor es que si tiene que ejecutar un proceso de difcil decodificacin dentro una iteracin, lo hace una vez solamente; en cambio el simulador lo hace tantas veces como la iteracin lo requiera, por lo que obviamente pierde eficacia. Como contrapartida, se pierde informacin acerca del programa ya que el programa fuente no se puede modificar al estar traducido. Por lo comn, un programa objeto es mucho ms grande que el programa fuente que lo produjo. A partir de esto, surge una nueva forma de de diferenciar los lenguajes: 1. Lenguajes compilados: significa que los programas en estos lenguajes se traducen ordinariamente al lenguaje de mquina de la computadora real que se est usando antes de que comience la ejecucin. 2. Lenguajes interpretados: en esta forma el traductor no produce cdigo de la mquina que se est utilizando, sino que produce alguna forma intermedia del programa cuya traduccin es ms fcil que la forma original. El uso de un intrprete de software da por resultado una ejecucin relativamente lenta del programa. Adems, requieren

una extensa simulacin por software de funciones primitivas , gestin de almacenamiento, etc.

2.2 Computadoras virtuales y tiempos de enlace.


Se consideraron formas para la construccin efectiva de computadoras: 1. A travs de una produccin en hardware: representacin de algoritmos y estructuras de datos con dispositivos fsicos, 2. A travs de una produccin en firmware: representacin por microprogramas de una computadora hardware adecuada. 3. A travs de simulacin por software: representacin por medio de programas y estructuras de datos de otro lenguaje de programacin. 4. A travs de alguna combinacin de estas tcnicas segn sea apropiado. Cuando se implementa un lenguaje de programacin, las estructuras de datos y algoritmos en tiempo de ejecucin que se emplean en la ejecucin de programas definen una computadora. El lenguaje de mquina de esta computadora virtual es el programa ejecutable que produce el traductor del lenguaje y puede ser cdigo de mquina autntico si el lenguaje se compila, o tener alguna estructura arbitraria si se interpreta. Las estructuras de datos de esta computadora virtual son las estructuras de datos en tiempo de ejecucin que se utilizan durante la ejecucin del programa y las operaciones primitivas son aquellas efectivamente ejecutables en el tiempo de ejecucin.

2.2.1 Sintaxis y Semntica.


Sintaxis: es el aspecto que ofrece un programa; significa definir cmo se escriben los enunciados, declaraciones y otras construcciones del lenguaje. Semntica: es el significado que se da a las diversas construcciones sintcticas. Por ejemplo, en C un arreglo de diez enteros se define como int V[10]; mientras que en pascal se define como V:array[0..9] of integer; . Ambas expresiones tienen la misma semntica (significan lo mismo) pero diferente sintaxis (se expresan de manera diferente). Para describir sintaxis, se suele utilizar la notacin BNF (Backus Naur Form). Un elemento particular de una computadora virtual puede: o tener una representacin sintctica. Tener un solo elemento como representacin sintctica. Tener varios elementos sintcticos individuales como representacin sintctica.

2.2.2 Computadoras virtuales e implementacin de lenguajes.


Cada vez que un lenguaje se implementa en una computadora distinta (por ejemplo, en C o en Pascal) el implementador tiende a ver una computadora virtual un poco diferente (o mucho) en la definicin del lenguaje. As es que dos implementaciones distintas del mismo lenguaje pueden utilizar un conjunto diferente de estructuras de datos y operaciones en la implementacin. Si la computadora virtual contiene una variable entera X, el implementador puede entonces optar por representar X directamente por una localidad de almacenamiento de memoria que contenga el valor de X, o puede decidir representar X en una localidad de almacenamiento que contenga una marca tipo que designe entero y junto con un apuntador hacia otra localidad de almacenamiento que contiene el valor de X.

2.2.3 Jerarqua de computadoras.


La computadora virtual que un programador utiliza eta formada por una jerarqua de computadoras virtuales hasta que abajo, est la computadora hardware real. Esta computadora hardware se transforma sucesivamente a travs de capas software en una computadora virtual que puede ser radicalmente distinta.
Datos de entrada Datos de salida

COMPUTADORA VIRTUAL DESARROLLADA POR EL PROGRAMADOR (implementada por el modelo de ejecucin desarrollado en el programa C para el uso en la computadora virtual de C)

COMPUTADORA VIRTUAL DE C (implementada por rutinas de biblioteca en tempo de ejecucin cargadas con el programa compilado)

COMPUTADORA VIRTUAL DEL SISTEMA OPERATVO (implementada por programas en el lenguaje de mquina de ejecucin en la computadora virtual de firmware) COMPUTADORA VIRTUAL DE FIRMWARE (instrucciones en lenguaje de mquina implementadas por microcdigo ejecutado por la computadora real)

COMPUTADORA DE HARDWARE REAL (implementada por dispositivos fsicos)

Aqu queda implcito un concepto importante: la equivalencia de programas y datos. Lo que es programa en un contexto, es probable que se convierta en dato en otro.

2.2.4 Enlaces y tiempos de enlace.


Enlace: Un elemento de programa est en enlazado a una propiedad o caracterstica particular cuando se elige la propiedad de entre un conjunto de propiedades posibles.

Tiempo de enlace: es el momento durante el cual se hace esta eleccin. Clases de tiempos de enlace. En el procesamiento de un lenguaje siempre interviene un paso de traduccin seguido por la ejecucin del programa traducido. 1. Tiempo de ejecucin: incluye enlaces de variables a sus valores, de variables a localidades particulares de almacenamiento. Se distingue dos tipos: a. Al entrar a un subprograma o bloque: muchos enlaces solo ocurren en esta etapa, por ejemplo: enlace de parmetros formales a reales y enlace de parmetros formales a localidades particulares de almacenamiento. b. En puntos arbitrarios durante la ejecucin: hay enlaces que pueden ocurrir en cualquier punto durante la ejecucin, por ejemplo el enlace de variables a valores mediante la asignacin. 2. Tiempo de traduccin: se pueden distinguir tres clases: a. Enlaces elegidos por el programador: nombres de variables, tipos de variables, estructuras de enunciados del programa, etc. b. Enlaces elegidos por el traductor: la localidad relativa de un objeto de datos en el almacenamiento, como se guardan los arreglos y cmo se crean descriptores para los arreglos, etc. c. Enlaces elegidos por el cargador: variables a direcciones dentro del almacenamiento designado para cada subprograma, etc. 3. Tiempo de implementacin del lenguaje: se refiere a aspectos de una definicin de lenguaje que son iguales para todos los programas que se ejecutan usando una implementacin particular, por ejemplo: representacin de nmeros y operaciones aritmticas. 4. Tiempo de definicin del lenguaje: Se refiere a la estructura de un lenguaje que se fija cuando ste se define. Ejemplo: posibles formas de hacer enunciados, tipos de estructuras de datos, estructuras de programa, etc. Ejemplo: Si tenemos X = X + 10 escrito en un lenguaje L. 1. Conjunto de posibles tipos para la variable X: se fijan durante la traduccin. 2. Tipo de variable X: puede ser durante la traduccin (ejemplo C) o durante la ejecucin (ejemplo JavaScript). 3. Conjunto de valores posibles para X: se determina durante la implementacin del lenguaje o alternativamente, en el tiempo de carga. 4. Valor de la variable X: de modo habitual, ser durante la ejecucin a travs de una asignacin de un valor. 5. Representacin de la constante 10: puede ser en el tiempo de definicin del lenguaje (usando la cadena 10 como constante en los programas) o en el tiempo de implementacin (segn la serie particular de bits para representar 10 durante la ejecucin).

6. Propiedades del operador +: la eleccin del smbolo + para representar adicin se hace en tiempo de definicin del lenguaje. Pero la operacin que se representa con el smbolo + en caso de homonimia se realiza en tiempo de compilacin.

Importancia de los tiempos de enlace. Cuando todos los enlaces se efectan durante la traduccin, se habla de un enlace temprano; pero cuando la mayora de stos se hacen durante el tiempo de ejecucin, se habla de un enlace tardo. Las ventajas y desventajas de estos dos tipos de enlaces, estn relacionadas al conflicto entre eficiencia y flexibilidad. Tiempos de enlace e implementacin de lenguajes. Por lo general, las definiciones de lenguajes son permisivas con respecto a la especificacin de tiempos de enlace (lo puede elegir el implementador), pero el momento efectivo en el cual el enlace se lleva a cabo est definido de hecho slo por la implementacin del lenguaje.

2.3 Paradigmas en Lenguajes.


Existen cuatro modelos bsicos de computacin para describir los lenguajes: 1. Lenguajes imperativos o de procedimientos: son orientados a enunciados (instrucciones). Un programa se compone de una serie de enunciados y la ejecucin de cada enunciado hace que el intrprete cambie el valor de una o ms localidades de memoria para pasar a un nuevo estado. La forma tpica es:

enucniado1; enunciado2; enunciado3; ...

Este modelo procede del hardware de la computadora convencional que ejecuta instrucciones en forma secuencial. 2. Lenguajes aplicativos o funcionales: consisten en examinar la funcin que el programa representa como una funcin, sin importar los cambios de estado que conforme el programa se ejecute. Se observa el resultado en vez de los datos disponibles. El desarrollo del programa procede a travs del desarrollo de funciones a partir de funciones previamente desarrolladas, para construir funciones ms complejas que manipulan en conjunto de datos de entrada, hasta que la funcin final se puede usar para calcular la respuesta del programa a partir de los datos de entrada. Su forma tpica es:

funcionN(... ( funcion2( funcion1(datos))...)

3. Lenguajes con base en reglas: se ejecutan verificando la presencia de ciertas condiciones habilitadoras, y cuando stas se satisfacen, ejecutan una accin apropiada. Las condiciones habilitadoras determinan el orden de ejecucin. Sintaxis similar a:
condicion habilitadora1 => accion1 condicion habilitadora2 => accion2 condicion habilitadora3 => accion3 ... condicion habilitadoraN => accionN

4. Lenguajes orientados a objetos: se construyen objetos complejos de datos a partir de objetos ms simples, designndoles funciones para que operen con esos datos. Los objetos complejos son extensiones de los ms simples y heredan propiedades de objetos ms sencillos. Con estos lenguaje se pretende ganar la eficiencia de los lenguajes imperativos y construir la flexibilidad y confiabilidad del modelo aplicativo o funcional. Adems, existe una distincin de cdigo espagueti y cdigo estructurado.