Está en la página 1de 57

Aspectos de dise de los lenguajes de programacin

(Tema 2)

Introduccin
Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un cdigo de mquina eficiente, an cuando la escritura de los programas era difcil.
Ejemplos: Fortran y LISP

Introduccin
En la actualidad los equipos son de bajo costo, por lo que, permiten el desarrollo de programas que son fciles de escribir correctamente aunque se ejecuten con lentitud algo mayor.
Ejemplos: C++, Java, Ada

Pero, cmo se disean esta clase de lenguajes?

Cmo disear un lenguaje?


Se tiene que tomar en cuenta tres influencias principales: 1 La computadora subyacente en donde se van a ejecutar los programas escritos en el lenguaje. 2 El modelo de ejecucin, o computadora virtual, que apoya a ese lenguaje en el equipo real. 3 El modelo de computacin que el lenguaje implementa.

Organizacin y operacin de una computadora

La arquitectura de una computadora la podemos describir como la unin de microprocesadores, memoria y dispositivos de I/O.

Organizacin y operacin de una computadora

Una computadora es un conjunto de tipos de datos, operaciones y caractersticas, capaz de almacenar y ejecutar programas.

A partir de la definicin de una computadora siempre es posible construir la computadora en hardware.

Tipos de Arquitecturas
Arquitectura Tradicional Von Newmann Arquitecturas Alternativas Multiprocesadores

Archivos externos dispositivos de entrada y salida Memoria Principal

Memoria Cach

UCP

Registro de Direcciones

Registros de Datos

Intrprete

Operacin Primitiva

Operacin Primitiva

Organizacin de una computadora convencional

Componentes Fundamentales de una Computadora


Datos
Operaciones Primitivas

Control de Secuencia
Acceso a Datos

Gestin de Almacenamiento
Entorno de Operacin.

Datos
Elementos de informacin integrados a la computadora, manipulables directamente a travs de operaciones primitivas de hardware.

Operaciones Primitivas
Una computadora debe contener un conjunto de operaciones primitivas interconstruidas, tiles para la manipulacin de datos.

Control de Secuencia
Una computadora debe proporcionar mecanismos para controlar el orden en el que se van a ejecutar las Operaciones primitivas.

Acceso a Datos
Una computadora debe incorporar algn medio para designar operandos y un mecanismo para recuperar operandos de un designador de operandos dado.

Gestin de Almacenamiento
Una computadora debe proveer mecanismos para la asignacin de almacenamiento para programas.

Entorno de Operacin
El entorno de operacin de una computadora consiste ordinariamente en un conjunto de dispositivos perifricos de almacenamiento de entrada / salida

Estados de Computadoras

Representacin dinmica de la computadora durante la ejecucin de los programas.

Computadoras de Firmware

Es la computadora simulada por un microprograma que se ejecuta en una computadora microprogramable de hardware especial. Su lenguaje de mquina consiste en un conjunto de microinstrucciones de nivel extremadamente bajo.

Traductores y computadoras simuladas por Software


I. Traduccin Preprocesador Compilador Ensamblador Cargador

II. Simulacin de software

Programa Fuente

Preprocesador

Programa Fuente estndar Cdigo Objeto


Cdigo Mquina Ejecutable

Compilador

Ensamblador

Cargador

Preprocesador
Bsicamente es un procesador de texto, toma como entrada una forma ampliada de un lenguaje fuente y su salida es una forma estndar del mismo lenguaje fuente.

Compilador
Un compilador es un traductor cuyo lenguaje fuente es un lenguaje de alto nivel y cuyo lenguaje objeto se aproxima al lenguaje mquina de una computadora real , ya sea que se trate de un lenguaje ensamblador o alguna variedad de lenguaje mquina.

Ensamblador
Es un traductor cuyo lenguaje objeto es tambin alguna variedad de lenguaje mquina para una computadora real, pero cuyo lenguaje fuente, un lenguaje ensamblador, constituye en gran medida una representacin simblica del cdigo de mquina objeto.

Cargador
Es un traductor cuya entrada es un lenguaje objeto y la salida es un programa en lenguaje mquina relocalizable.

Mquina Virtual

Son las estructuras de datos y algoritmos de un lenguaje que se emplean durante el tiempo de ejecucin de un programa.

Programa en C
ADD #1, AX MOV BX, 300

Mquina virtual de C
Oculta las operaciones y estructuras de bajo nivel

010111011

Relacin entre Lenguaje y Mquina Virtual

Una mquina define un lenguaje Un lenguaje define una mquina

Cdigo en C if (x==n) { var1 = 1; var2 = 0; } else { var1 = 0; var2 = 1; } var1 = 0; var2 = 0;

Mquina virtual de C

Jerarqua de Mquinas Virtuales

Una computadora con n niveles puede verse como n mquinas virtuales diferentes, cada una de las cuales tiene un lenguaje especial.
Nivel de lenguaje orientado a problemas Nivel de lenguaje ensamblador

Programador

Nivel del Sistema Operativo Nivel del Sistema Convencional Nivel de Microprogramacin

0101
Nivel de Lgica Digital Nivel de Dispositivo Fsica Estado Slido

Los RISC no cuentan con una descripcin de microinstrucciones

Traductor para la Mquina Virtual

Se debe suministrar un traductor para traducir programas de usuario al lenguaje de mquina de la computadora virtual definida por el lenguaje. traductor
traductor traductor

Programa en C

Computadora virtual de C

Computadora virtual de Ensamblador

...
Computadora de Hardware Real

Jerarqua de Mquinas Virtuales

Cada nivel representa una abstraccin con objetos y operaciones diferentes Cada nivel esta construido sobre su predecesor Si se quiere escribir programas para la mquina virtual del nivel n, no se necesita conocer los interpretes ni los traductores de los niveles de abajo.

Las computadoras estn diseadas como una serie de niveles Para disear nuevos niveles, se necesita conocer todos.

La Mquina Virtual de Java

Por qu estn de moda los Bytecodes

Habrs odo que con el lenguaje de programacin Java, puedes "escribir una vez, ejecutar en cualquier parte". Esto significa que cuando se compila un programa, no se generan instrucciones para una plataforma especfica. En su lugar, se generan bytecodes Java, que son instrucciones para la Mquina Virtual Java (Java VM). Si tu plataforma- sea Windows, UNIX, MacOS o un navegador de internet-tiene la Java VM, podr entender los bytecodes.

Enlaces y tiempo de enlace

Un enlace es la asignacin de atributos a una celda de memoria para un elemento de programa. El momento en que el programa hace esta eleccin se conoce como el tiempo de enlace.
nombre a tipo entero Tabla de Smbolos direccin a Memoria

Tipos de tiempos de enlace

Tiempo de ejecucin
El enlace de parmetros formales a reales A travs de la asignacin de valores a variables

Tiempo de compilacin
Tipos para las variables Como se guardan las estructuras de datos y sus descriptores

Tiempo de carga
Fusionar los subprogramas en un ejecutable nico enlazando las variables a direcciones reales de memoria

Tipos de tiempos de enlace

Tiempo de implantacin del lenguaje


Representacin de nmeros y operaciones aritmticas en la computadora de hardware subyacente

Tiempo de definicin del lenguaje


Todas las posibles formas opcionales de enunciados, tipos de estructuras de datos, estructuras de programa.

Por ejemplo, cuntos tipos de enlace tiene este sencillo enunciado de asignacin escrito en un lenguaje L:

X := X + 10

Tipos de tiempos de enlace

Cuando un enlace se efecta durante el tiempo de ejecucin, se dice que es de tipo dinmico.
Ejemplos: Prolog, LISP y ML

El enlace que ocurre durante el tiempo de compilacin es de tipo esttico.


Ejemplos: C, Pascal y Fortran

Alcance de una variable

Es el conjunto de enunciados en el que el identificador de la variable es vlido.

Alcance esttico: El alcance se determina de acuerdo

al lugar donde el identificador es definido. Se le llama tambin alcance lexicogrfico.

El alcance esttico se determina fcilmente utilizando diagramas de contorno.

Alcance esttico
Programa A var x,l,m : entero comienza Proc B var l : entero comienza . . . termina Proc C var m, r : entero comienza Proc D var x,y,z : entero comienza . . . termina termina termina

Diagrama de Contorno
x,l,m A

m,r
x,y,z D

Alcance Dinmico

El alcance se determina de acuerdo al lugar donde se hizo la ltima definicin del identificador. Se puede decir que va siguiendo la historia del programa. El alcance dinmico se determina utilizando los registros de activacin.
Enlace dinmico Enlace esttico Dir. de retorno Valor de retorno Variables Locales Parmetros

Quien lo llam

Diferencias entre Alcance Esttico y Alcance Dinmico


Programa B var a : entero Proc P1 comienza Imprime(a); Termina Proc P2 var a : entero comienza a = 0; P1; termina comienza a = 7; P2; termina

Diagrama de Contorno
a=7 B

P1

a=0

P2

Alcance esttico

Imprime 7

Diferencias entre Alcance Esttico y Alcance Dinmico


Programa B var a : entero Proc P1 comienza Imprime(a); Termina Proc P2 var a : entero comienza a = 0; P1; termina comienza a = 7; P2; termina

Registros de Activacin
Enlace dinmico Enlace esttico Dir. de retorno Valor de retorno

Enlace dinmico Enlace esttico Dir. de retorno Valor de retorno a=0


a=7

P1

P2

Alcance dinmico

Imprime 0

Funciones Virtuales en C++


// Archivo descrip1.hpp class description { protected: char * information public: description(char *info): information(info){} void print(){ printf("%s\n", information); } }; // Archivo descrip2.hpp class sphere: public description { private: float radius; public: sphere(char * info, float rad): (info),radius(rad){} void print(){ printf("%s\n", information); printf("radio=%g\n", radius); } }; // Archivo descrip.cpp sphere small_ball("mini",1.0), beach_ball("plastico", 24.0), planetoid("luna", 1e24); description *shapes[] = { &small_ball, &beach_ball, &planetoid } main() { double tam; tam = sizeof(shapes)/sizeof(shapes[0]); small_ball.print(); mini beach_ball.print(); radio=1.0 planetoid.print(); plastico radio=24.0 for(int=0;i<tam; i++) luna shapes[i]->print(); radio=1e+024 } mini plastico luna

Funciones Virtuales en C++


// Archivo descrip1.hpp class description { protected: char * information public: description(char *info): information(info){} virtual void print(){ printf("%s\n", information); } }; // Archivo descrip2.hpp class sphere: public description { private: float radius; public: sphere(char * info, float rad): (info),radius(rad){} virtual void print(){ printf("%s\n", information); printf("radio=%g\n", radius); } }; // Archivo descrip.cpp sphere small_ball("mini",1.0), beach_ball("plastico", 24.0), planetoid("luna", 1e24); description *shapes[] = { &small_ball, &beach_ball, &planetoid } main() { mini double tam; radio=1.0 tam = sizeof(shapes)/sizeof(shapes[0]); plastico small_ball.print(); radio=24.0 beach_ball.print(); luna planetoid.print(); radio=1e+024 mini for(int=0;i<tam; i++) radio=1.0 shapes[i]->print(); plastico } radio=24.0 luna radio=1e+024

Consecuencias del tiempo de enlace

Dependiendo del tipo de enlace un programa puede ser ms eficiente o ms flexible


Tipo Dinmico Esttico Eficiencia Flexibilidad

+ -

Paradigmas de los lenguajes de programacin

En ciencias de la computacin un paradigma se puede definir como un conjunto de conceptos que permiten modelar el mundo. Un paradigma es usado para formular una solucin de cmputo a un problema.

Paradigmas de los lenguajes de programacin


Existen 5 modelos que describen los lenguajes de programacin

Lenguajes Lenguajes Lenguajes Lenguajes Lenguajes

imperativos o de procedimientos aplicativos o funcionales con base en reglas o lgicos orientados a objetos concurrentes

1. Lenguajes imperativos o de procedimientos


Se caracterizan por ser claros, formales y elegantes.

Son controlados por enunciados imperativos enunciado 1; enunciado 2; ... La ejecucin de un enunciado hace que el interprete cambie el valor de una o mas localidades en memoria Ejemplos: Fortran, Pascal, C, Algol, Ada, PL/1

FORTRAN

INTEGER I REAL X(10), SUM SUM = 0.0 DO 100 I=1,10 100 SUM=SUM+ X(I)**2 IF (SUM .GT. 1E+5) STOP WRITE(6,200) I,SUM 200 FORMAT ('SUMA', I, 'VALORES E',E15.7) END

2. Lenguajes aplicativos o funcionales


Se caracterizan por ser muy eficientes, expresivos y semanticamente elegantes.

Los lenguajes aplicativos hacen uso de las funciones puras con composicin funcional, recursin y expresiones condicionales Tienen 4 componentes:
un conjunto de funciones primitivas un conjunto de formas funcionales la operacin de aplicacin un conjunto de objetos de datos

Ejemplos: LISP, ML

LISP
; Factorial (defun fact (n) (if (= n 1) ; caso de terminacin -> 1! = 1 1 (* n (fact (- n 1))) ; relacin recursiva: n! = n * (n-1)! ) )

3. Lenguajes con base en reglas o lgicos


Se caracterizan por ser eficaces y veloces

Se ejecutan verificando una condicin, que cuando se satisface ejecutan una accin condicin 1 entonces accin 1 condicion 2 entonces accion 2 ... Ejemplo: Prolog

PROLOG
/* Esta linea es un comentario */ /* BASE DE HECHOS */ padre(pam, bob). padre(tom, bob). padre(tom, liz). padre(bob, ann). padre(bob, pat). padre(pat, jim). femenino(pam). femenino(liz). femenino(ann). femenino(pat). masculino(bob). masculino(tom). masculino(jim).

Pam

Tom

Bob

Liz

Ann

Pat

Jim

/* REGLAS */ es_hijo(X,Y):- padre(Y,X), masculino(X). tia(X,Y):- padre(PY,Y), hermanos(X,PY), femenino(X). hermanos(X,Y):- padre(PX,X), padre(PX,Y), no_es_igual(X,Y). abuelo(X,Y):- padre(PY,Y), padre(X,PY), masculino(X). no_es_igual(X,X):- !,fail. no_es_igual(X,Y):- true. /* PREGUNTA */ ?- abuelo(tom,liz).

4. Lenguajes orientados a objetos


Se caracterizan por trabajar con entes abstractos (objetos) que reflejan las propiedades y caractersticas de objetos o entes reales

Las actividades a realizarse se tornan alrededor de los objetos mediante mtodos (funciones) La comunicacin con el objeto se da a travs de mensajes Un aspecto fundamental es el concepto de herencia que se da cuando los objetos pertenecen a la misma clase Ejemplos: Simula, Smalltalk, Java

Java
class TestTh extends Thread { private String nombre; private int retardo; // Constructor para almacenar nuestro nombre // y el retardo public TestTh( String s,int d ) { nombre = s; retardo = d; } // El metodo run() es similar al main(), pero para // threads. Cuando run() termina el thread muere public void run() { // Retasamos la ejecucin el tiempo especificado try { sleep( retardo ); } catch( InterruptedException e ) { ; } // Ahora imprimimos el nombre System.out.println( "Hola Mundo! "+nombre+" "+retardo ); } }

Java

public class MultiHola { public static void main( String args[] ) { TestTh t1,t2,t3; // Creamos los threads t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) ); t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) ); // Arrancamos los threads t1.start(); t2.start(); t3.start(); } }

5. Lenguajes Concurrentes
Su principal objetivo es mejorar la velocidad de computo, compartir recursos y distribuir la carga de trabajo

Diferentes tipos de arquitecturas:


Redes de cobertura amplia Redes Locales Multiprocesadores (Clusters)

Comunicacin y cooperacin entre aplicaciones a travs de :


Envo y recepcin de mensajes Llamado a procedimiento remoto Comunicacin de grupo Memoria Virtual Distribuida

Ejemplos: PVM, CSP, Ada

Ada
procedure DECOD_MENSAJE task GENERAR_CODIGOS; task DECODIFICAR is entry ENVIAR_CODIGO (C: in CHARACTER); entry RECIBIR_CAR (C: out CHARACTER); end; task IMPR_MENSAJES; task body GENERAR_CODIGOS is CODIGO_SIGUIENTE: CHARACTER; begin loop --setencias para recibir datos --y generar un valor para CODIGO_SIGUIENTE DECODIFICAR.ENVIAR_CODIGO (CODIGO_SIGUIENTE); end;

task body DECODIFICAR is CODIGO, CAR : CHARACTER; begin loop accept ENVIAR_CODIGO (C: in CHARACTER) do CODIGO := C; end; --setencias para decodificar el valor de CODIGO --y presentar el valor decodificado en CAR accept RECIBIR_CAR (C: out CHARACTER) do C:= CAR; end; end loop; end; task body IMPR_MENSAJE is TAM_LINEA := 1; CAR_SIGUIENTE: CHARACTER; POSICION_LINEA: INTEGER; LINEA: STRING (1..TAM_LINEA); begin POSICION_LINEA := 1; loop DECODIFICAR.RECIBIR_CAR (CAR_SIGUIENTE); LINEA(POSICION_LINEA):=CAR_SIGUIENTE; if POSICION_LINEA < TAM_LINEA then POSICION_LINEA := POSICION_LINEA + 1; else IMPRIMIR(LINEA); POSICION_LINEA := 1; end if; end loop; end; begin PUT (SE HAN ACTIVADO LAS TAREAS PARA DECODIFICAR MENSAJES) end;

Bibliografa
Pratt, Terrence W. Programming languages: design and implementation. 4th Ed. Prentice Hall. ISBN 0130276782 Bruce Eckel Aplique C++ / Madrid ; Mxico : Osborne McGraw-Hill, c1991 ISBN 84-7615-567-0

Fin