Sunteți pe pagina 1din 25

Aspectos Especficos

Aspectos especficos

Lenguajes Imperativos
Enfoque principal: estado de la mquina: conjunto de valores almacenados en pjosiciones de memoria Comandos: Sentencias que utilizan el estado actual para calcular el nuevo Sintaxis: S1; S2; S3; ... Lenguajes: FORTRAN, COBOL, C, Pascal,

Aspectos especficos

Fortran (1954-57)
FORmula TRANslator Desarrollado en IBM bajo supervisin de John Backus especialmente para clculo cientfico Cambi drsticamente el uso de los ordenadores hasta entonces Ha evolucionado despus, con nuevos conceptos y caractersticas

FORTRAN II, FORTRAN IV, FORTRAN 66, FORTRAN 77, FORTRAN 90

Siempre entre los compiladores ms eficiente y generando cdigo rpido An se usa en aplicaciones cientficas, p.e. superordenadores
3

Aspectos especficos

Fortran 0 and 1
FORTRAN 0 1954 (not implemented) FORTRAN I - 1957
Designed for the new IBM 704, which had index registers and floating point hardware Environment of development: Computers were small and unreliable Applications were scientific No programming methodology or tools Machine efficiency was most important Impact of environment on design No need for dynamic storage Need good array handling and counting loops No string handling, decimal arithmetic, or powerful input/output (commercial stuff)
4

Aspectos especficos

Names could have up to six characters Post-test counting loop (DO) Formatted I/O User-defined subprograms Three-way selection statement (arithmetic IF) IF (ICOUNT-1) 100, 200, 300 No data typing statements variables beginning with i, j, k, l, m or n were integers, all else floating point No separate compilation Programs larger than 400 lines rarely compiled correctly, mainly due to IBM 704s poor reliability Code was very fast Quickly became widely used
5

Fortran I Features

Aspectos especficos

Fortran II, IV and 77


FORTRAN II - 1958
Independent compilation Fix the bugs

FORTRAN IV - 1960-62
Explicit type declarations Logical selection (IF) statement Subprogram names could be parameters ANSI standard in 1966

FORTRAN 77 - 1978
Character string handling Logical loop control (WHILE) statement IF-THEN-ELSE statement
6

Aspectos especficos

Fortran 90 of more modern Added many features(1990) programming languages, including Pointers Recursion CASE statement Parameter type checking A collection of array operations, DOTPRODUCT, MATMUL, TRANSPOSE, etc dynamic allocations and deallocation of arrays a form of records (called derived types) Module facility (similar Adas package)
7

Aspectos especficos

Pascal (1971)
Diseado por Wirth. Sali del comit ALGOL 68 Diseado para ensear programacin eswtructurada Simple y sencillo Introdujo mejoras modestas, como la sentencia case Ampliamente usado en enseanza ~ 1980-1995.

Aspectos especficos

Compiladores para Pascal


El desarrollo del lenguaje y del primer compilador para ste fueron independientes

El lenguaje fue desarrollado por Wirth Experimentos sobre la portabilidad llevaron a Ammann al compilador Pascal-P
Generaba cdigo P, para una mquina de pila abstracta

Caractersticas:
Compilador de una pasada Organizado alrededor del A.Sintctico Analizador descendente recursivo

Aspectos especficos

Compiladores para Pascal


Organizacin del compilador Pascal-P
Cdigo Fuente Analizador lxico, marca errores en una copia del cdigo fuente Cadena de componente lxicos Traductor predictivo Comprobador de tipos Cdigo P
10

La memoria de la mquina se organiza en las siguientes reas:

Cdigo para los procedimientos Constantes Pila para registros de activacin Montculo para datos asignados aplicando el operador new

Aspectos especficos

Compiladores para Pascal


Ventajas del compilador de una pasada

Fue fcil de implementar Generaba poca actividad de entrada/salida


El cdigo de un procedimiento se compila en memoria y

se escribe como una unidad a la memoria secundaria

Inconvenientes

Limitaciones en la calidad del cdigo generado Mucha necesidad de memoria

11

Aspectos especficos

C (1972-)
Diseado para programar sistemas en Bell Labs, por Dennis Ritchie. Evolucion de B, y despus de ALGOL 68 Operadores potentes, pero pobre verificacin de tipos Muy extendido a travs de UNIX y disponibilidad de compiladores gratuitos y de alta calidad, especialmente gcc.

12

Aspectos especficos

Compiladores para C
Lenguaje de propsito general (Ritchie) Principal lenguaje de programacin en UNIX

UNIX est escrito en C

Se van a examinar el diseado por Ritchie (1979) para PDP-11 y los transportables PCC de Johnson (1979) Compiladores de dos pasadas

PDP-11 tiene una tercera opcional para optimizar el lenguaje ensamblador (elimina proposiciones redundantes o innaccesibles)
13

Aspectos especficos

Compiladores para C
Estructura de los compiladores C
Cdigo Fuente Analizador lxico y sintctico Generacin de cdigo intermedio Forma postfija o prefija de expresiones o cdigo ensamblador en caso constrario Generacin de Cdigo Lenguaje ensamblador Postoptimacin Lenguaje ensamblador

14

Aspectos especficos

Compiladores para C
El compilador PDP-11

El compilador PCC

Utiliza descenso recursivo para todo excepto las expresiones Expresiones con precedencia de operadores Cdigo intermedio:
Expresiones notacin

LALR(1) generado con YACC Cdigo intermedio:


Expresiones notacin

prefija Ensamblador dems construciones

postfija

Ensamblador para

estructuras de control

15

Aspectos especficos

Compiladores para Fortran H


Permite al usuario no elegir optimizacin, optimizacin de registros o completa Escrito por Lowry y Medlock (1969) Se realizan cuatro pasadas

Las dos primeras realizan el a.lxico y a.sintctico produciendo cudruplos La siguiente optimiza el cdigo y registros La ltima genera cdigo objeto a partir de cudruplos y asignaciones a registros

16

Aspectos especficos

Compiladores para Fortran H


Estructura de los compiladores H

En el lxico:
Devuelve: Los pares operador-

Cdigo Fuente Analizador lxico incluido manejo de COMMON y EQUIVALENCE Pares operador-operando Anlisis sintctico, de flujo de datos Asignacin de direcciones a nombres Cudruplos con asignaciones de registros Genera cdigo Cdigo mquina relocalizable

operando son un token operando junto con el token no operando precedente Utiliza precedencia de operadores para las expresiones Optimizaciones simples, sustituir multiplicaciones por dos por desplazamientos

En la optimizacin:
Eliminacin de subexpresiones

comunes

Traslado de cdigo Propagacin de copias Eliminacin de variables de

induccin

17

Paradigma de Orientacin a Objetos

Aspectos especficos

Las clases son tipos complejos que agrupan datos con operaciones (mtodos) que los usan y modifican Herencia: subclases pueden heredar objetos y mtodos de superclases La computacin se basa en objetos que se envan mensajes (invocaciones a mtodos) Ejemplos: Java, C++, Smalltalk

18

Aspectos especficos

Lenguajes Orientados a Objetos


Caractersticas

Mtodos Enlace objeto-mtodo


Esttico Dinmico

Herencia Sobrecarga y polimorfismo Herencia mltiple Coerciones Objetos genricos


19

Aspectos especficos

Implementacin de Clases
Ejemplo C++
#include <stdio.h> class A { public: int a; virtual int geta() { return a; } virtual void seta(int b) { a = b; } }; main() { A o; }

seta

geta

Registro de A: a tiene el dato entero seta, geta son punteros al cdigo de la clase

20

Aspectos especficos

Compilacin de lenguajes OO
El compilador conoce el tipo (clase) de cada variable objeto

Las invocaciones a mtodos se trasladan a llamadas ordinarias Se mantiene la invocacin a funciones basada en pila

Todos los objetos de una clase comparten la tabla de despacho


class A { public: dispatch ptr a int a; virtual int geta() { return a;} virtual void seta(int b){ a = b; } geta

seta

Compilacin: o1.a o1.geta() o1.seta(i)

o1->a o1->geta(o1) o1->seta(o1,i)

o1->a (*(o1-> dtptr[0]))(o1) (*(o1->dtptr[1]))(o1,i)

21

Aspectos especficos

Compilacin de lenguajes OO
Llamadas a mtodos

Enlace Esttico
El objeto al que se aplica el mtodo se pasa por

obj.m(x,y) -> m(&obj, x, y)

y x &Obj VD ED Vars

El atributo this tpico en lenguajes OO Aplicacin de un mtodo de clase base a

clases derivadas

La representacin de los objetos de la clase base tiene que estar incluida en la representacin de la clase derivada

22

Registro de Activacin m

referencia a ste como primer argumento

Aspectos especficos

MONTCULO: objs

Ejemplo C++
#include <stdio.h> class A { public: int a; virtual int geta() { return a; } virtual void seta(int b) { a = b; } }; main() { A o1, o2; o1.seta(4); o2.seta(5) }

o1.a

A::geta A::seta

o1

&A::geta &A::seta o2.a &A::geta &A::seta 4 &o1

o2

SEGMENTO DE CDIGO: clases

R.A. o1.seta(4)

PILA: llamadas

&main 5 &o2 &main


23

R.A. o2.seta(4)

Aspectos especficos

Herencia en OO
Una clase hereda los atributos y mtodos de otra, y aade los suyos propios

Podra implementarse con enlace esttico A B Campos de A Campos de B

Class B: A {} Sin funciones virtuales

Caso general: Xn hereda de Xn-1 , que hereda de. . . X1 Contenido de objeto de Xn :


dispatch ptr X1 atribs X2 atribs ... Xn atribs
24

X1 metodos

X2 metodos

. . . Xn metodos

Aspectos especficos

Herencia en OO
Sobreescritura de mtodos: una clase puede re-implementar mtodos heredados

Implica cambios en los enlaces al cdigo de mtodos (tiempo de compilacin) Podra implementarse con enlace esttico

Ej.:
class B : A { public: int b; virtual int getb() {return b;} virtual void setb(int c) {b = c + a;} virtual void seta(int c) {a = c+1;} };

dispatch ptr

A::seta (Class A* this, int c) {} B::seta (Class B* this, int c) {}


25

B::seta A::geta B::setb B::getb

Aspectos especficos

Herencia en OO
Polimorfismo: una variable de clase base puede referirse a clase heredada Ej.:
class B* b = new B(); class A *a=b;
puntero a A dentro de B puntero a B a

b &A::seta &A::geta &B::getb &B::setb

Lo mismo ocurre con llamadas a mtodos


void f(A* x) { ... } ... B y; ... f(y);

class

*a= conv_ptrB_2_ptrA(b)

upcasting: en tiempo de compilacin


26

Aspectos especficos

Herencia en OO
Enlace dinmico: si b es realmente es de clase B, invoca a los mtodos de B Ej.:
class B* b = new B(); class A *a=b; a.seta(4);
puntero a A dentro de B puntero a B a

b &A::seta &A::geta &B::getb &B::setb &B::seta

No puede predecirse en tiempo de compilacin!


class C* c; if (random()>0.5) c=b; else c=new A(); c.seta(4);

27

Aspectos especficos

Enlace dinmico
Solucin: tablas virtuales de despacho dinmico

Se precisa informacin dinmica de tipos (distinguir A de A en B) Estructura de clases conocida


C++ No necesita

Campos de A TVA

Class A {} A con funciones virtuales

A: geta A::seta Tabla virtual de A

representacin de clases en tiempo de ejecucin, Smalltalk s

A B

Campos de A TVA_B Campos de B TVB

Class B: A {} A:geta B:seta B::getb B::setb Tabla virtual de B


28

Aspectos especficos

Tablas virtuales
Tablas virtuales de despacho dinmico

Identificar la clase del objeto para poder decidir que mtodo se tiene que aplicar Transformar tipo de this en ejecucin

Ej.:
class B* b = new B(); class A *a1=new A(); class A *a2=b; a1.seta(4); a2.seta(4)

a1->dtptr->A::seta(a1, 4); a2->dtptr->B::seta(convert_ptrA_2_ptrB(a2),4);

downcasting
29

Aspectos especficos

Herencia mltiple
Una clase hereda los atributos y mtodos de otra, y aade los suyos propios
class C { field c1; field c2; virtual method virtual method } class D { field d1; virtual method virtual method } class E : C,D { field e1; method m4(); method m5(); }; puntero a E m1(); m2(); puntero a C dentro de E

c1 c2 TV d1 TV e1 TV

&C::m1 &C::m2 &D::m3 &E::m4 &E::m5

m3(); m4();

puntero a D dentro de E

upcast downcast

convert_ptrE_2_ptrC(e) -> e convert_ptrE_2_ptrD(e) -> e + sizeof(C) convert_ptrC_2_ptrE(e) -> e convert_ptrD_2_ptrE(e) -> e - sizeof(C)
30

Aspectos especficos

Resumen Compilacin Lenguajes OO


Anlisis sintctico

Estructura de clases y sintaxis Enlace esttico Coercin de tipos Invocacin de mtodos Creacin dinmica de objetos Despacho dinmico para mtodos con polimorfismo Reducir la sobrecarga de llamadas
Java: final, C++: virtual,
31

Anlisis semntico

Paquete de ejecucin

Optimizacin

Aspectos especficos

Lenguajes funcionales
Paradigma de lenguaje funcionales (o aplicativos)

Programas como funciones que toman argumentos y devuelven valores (incluyendo otras funciones) La programacin consiste en construir funciones que calculen la respuesta, aplicar la funcin y componer la respuesta 1930s 1950s 1960s 1970s 1980s 1990s Lambda calculus (Church) Lisp (McCarthy) semantics, deconstruction FP (Backus) Miranda (Turner), ML (Milner) Haskell
32

Historia

Aspectos especficos

LISP (1959)
LISt Processing language (Designed at MIT by McCarthy) AI research needed a language that: Process data in lists (rather than arrays) Handles symbolic computation (rather than numeric) One universal, recursive data type: the s-expression An s-expression is either an atom or a list of zero or more s-expressions Syntax is based on the lambda calculus Pioneered functional programming No need for variables or assignment Control via recursion and conditional expressions Status Still the dominant language for AI COMMON LISP and Scheme are contemporary dialects ML, Miranda, and Haskell are related languages 33

Aspectos especficos

Functional Programming
Common Lisp: consolidation of LISP dialects spurred practical use, as did the development of Lisp Machines. Scheme: a simple and pure LISP like language used for teaching programming. Logo: Used for teaching young children how to program. ML: (MetaLanguage) a strongly-typed functional language first developed by Robin Milner in the 70s Haskell: polymorphicly typed, lazy, purely functional language.

34

Aspectos especficos

Aspectos de Lenguajes Funcionales


Idea bsica: un programa es una funcin con entrada y salida El programador slo especifica qu hay que calcular, no se preocupa de como, donde o cuando hacerlo

No hay sentencias, bucles, estructuras de control Slo se preocupa del algoritmo eficiente, no de aspectos de bajo nivel: reducir llamadas, gestionar la memoria, etc.

Complicaciones con respecto a imperativos: mayhor abstraccin, notacin matemtica, generalidad


Listas Definicin con bsqueda de patrones (Pattern matching) Tipos y funciones polimrficas Funciones de orden superior (Higher-order) Evaluacin tarda (Lazy evaluation)
35

Aspectos especficos

Aspectos de Lenguajes Funcionales


Listas: elemento esencial. Notacin (Haskell)

notacin explcita: [] [1, 2, 3] [1..100] notacin con operador aditivo : (1: (2: (3: [])))

Especificacin con notacin de conjuntos (List comprehension)


[s=n^2 | n <- [1..100], odd n] qsort (x:xs)= qsort[y|y<-xs, y<x]++[x]++ qsort[y|y<-xs, x>=x]

Operadores <-, ++,

36

Aspectos especficos

Aspectos de Lenguajes Funcionales


Funciones definidas con patrones
fac 0 = 1 fac n = n *

fac (n-1)

No se precisan parntesis para funcin

Tipos polimrficos
length [] = 0 length (x:xs) = 1 +length xs take 0 xs = [] take n [] = [] take n (x:xs) = x: take (n-1) xs No depende del tipo de cada elemento
37

Aspectos especficos

Aspectos de Lenguajes Funcionales


Funciones de orden superior

Las funciones pueden ser argumentos de entrada y salida (diferencia con leng. imperativos)

diff f = f1 where f1 x= (f (x+h)-f x)/h where h=0.001 Nueva funcin: diff diff diff exp - x

Creacin de funciones con currying (H.B. Curry)


Funcin de n argumentos recibe m parmetros: nueva

funcin de n-m argumentos deriv f x = (f (x+h)-f x) / h where h=0.001 funcin de un argumento: deriv sqrt

38

Aspectos especficos

Aspectos de Lenguajes Funcionales


Evaluacin retardada (lazy evaluation)

Las funciones dependen de argumentos que se evalan cuando son necesarios para seguir)

take n [1..]

[1 ..] es una lista infinita! En tiempo de ejecucin se evalan n primeros elementos

39

Aspectos especficos

Compilar Lenguajes Funcionales


Anlisis sintctico

Notacin listas, especificacin Definicin funciones Inferencia de tipos polimrficos Funciones de orden superior Evaluacin retardada

Programa fuente

Traduccin sintaxis Inferencia de tipos

Anlisis semntico

Ncleo Funcional

Optimizacin

Paquete de ejecucin

Generacin de cdigo
Cdigo generado (C) Paquete de ejecucin

Compilador C
Cdigo mquina
40

Aspectos especficos

Traduccin a ncleo funcional


Representacin del programa con estructuras de control y funciones explcitas

Se utiliza cdigo de leng. imperativo (C): llamadas a funciones y estructuras de control Se sustituye la notacin de conjuntos por llamadas explcitas Se mantiene la semntica de funciones de orden superior y evaluacin retardada

Transformaciones
Traduccin de listas a notacin explcita

[1..100] (1: (2: (3 :) (llamada a funciones de libera)

Pattern matching a estructuras de tipo if () else if () Especificaciones sobre listas a llamadas a funciones de orden

superior: [expresion | calificador1, , calificador]

41

Aspectos especficos

Paquete de Ejecucin. LLamadas


Llamadas a funciones

La traduccin de especificaciones genera llamadas anidadas Funciones de orden superior y evaluacin retardada Representacin de funciones con currying

direccin retorno <sin enlace acceso> enlace de control parm: n direccin retorno enlace de acceso enlace de control direccin retorno enlace de acceso enlace de control parm: n

RA main RA padre RA hijo1

La implementacin con pila es insuficiente


fp

RA hijo2

enlace de acceso (acceso esttico o lxico vs acceso dinmico) 42

Aspectos especficos

Paquete de Ejecucin. LLamadas


Ejemplo llamada a funciones de orden superior fun f(x) = let fun g(y)=x+y in g end val h=f(3) val j=f(4) val z=h(5) val w=j(7)

43

Aspectos especficos

Paquete de Ejecucin. LLamadas


Funcin de primer orden
reverse
reverse :: [a] -> [b] reverse [] = [] reverse (x:s) = reverse(s) : x

L = [] reverse L = [3]

reverse [1,2,3] = [3,2,1]

reverse L = [2,3] reverse L = [1,2,3]

pila

44

Aspectos especficos

Paquete de Ejecucin. LLamadas


Funcin de orden superior
map:: (a->b) -> ([a]->[b]) map f [] = [] map f (x:s) = (f x) : map f s g:: int -> (int->int) g x = f where f v = x+v

map (g 4) [10,11,12] = [14,15,16]

fuera de su entorno de definicin

Problema: hay que guardar x como parte del entorno de la funcin devuelta. Funciones locales activas

g x=4

pila

45

Aspectos especficos

Paquete de Ejecucin. LLamadas


Solucin:
La funcin invocada (g 4) devuelve puntero a su entorno de llamada g fn(y:int) => x+y Y=10
map f= L=[10,11,12];
Cierre: puntero a cdigo y al entorno de es cdigo

< ,

>

fn(y:int) => x+y env = g x=4

pila

En montculo
46

Aspectos especficos

Paquete de Ejecucin. LLamadas


Solucin alternativa a montculo:

Usar dos pilas:


Pila de contexto con los

Pila de Contexto

EP CSP

bloques de activacin Pila de argumentos

Se evita que los parmetros impidan la eliminacin del registro de activacin antes de la ltima llamada Los parmetros se deben copiar de la pila de argumentos a la de contexto

AP Pila de Argumentos

EP: apuntador al mbito activo CSP: apuntador a la cabeza de la pila de contexto AP: apuntador a la cabeza de la pila de argumentos 47

Aspectos especficos

Paquete de Ejecucin. Reduccin de grafo


Es el intrprete de la representacin intermedia en el ncleo funcional

Funcin eval. Toma las funciones construidas en tiempo de ejecucin @ @ f e1

El reductor de grafo resuelve las funciones de orden superior y evaluacin retardada

Manipula nodos que representan llamadas parciales a funciones: ejecucin suspendida Cada llamada de n argumentos es un subgrafo con n hijos

e2

en

f e1 e2 en

Cuando estn evaluados todos los hijos se tiene una expresin reducible

Motor de reduccin de grafos


48

Aspectos especficos

Optimizacin en lenguajes funcionales


Esencial para obtener prestaciones aceptables Sobre la representacin intermedia: ncleo funcional

Constant folding Eliminacin de subexpresiones comunes Las llamadas directas (f g) se transfieren directamente sin nodos de aplicacin Anlisis de argumentos que pueden evaluarse en tiempo de compilacin Optimizacin de llamadas recursivas
Recursin en cola (la ltima llamada no consume pila)

49