Documente Academic
Documente Profesional
Documente Cultură
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
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 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
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
Cdigo para los procedimientos Constantes Pila para registros de activacin Montculo para datos asignados aplicando el operador new
Aspectos especficos
Inconvenientes
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
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
postfija
Ensamblador para
estructuras de control
15
Aspectos especficos
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
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
induccin
17
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
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
seta
21
Aspectos especficos
Compilacin de lenguajes OO
Llamadas a mtodos
Enlace Esttico
El objeto al que se aplica el mtodo se pasa por
y x &Obj VD ED Vars
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
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
o2
R.A. o1.seta(4)
PILA: llamadas
R.A. o2.seta(4)
Aspectos especficos
Herencia en OO
Una clase hereda los atributos y mtodos de otra, y aade los suyos propios
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
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
class
*a= conv_ptrB_2_ptrA(b)
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
27
Aspectos especficos
Enlace dinmico
Solucin: tablas virtuales de despacho dinmico
Campos de A TVA
A B
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)
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
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
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
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.
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
notacin explcita: [] [1, 2, 3] [1..100] notacin con operador aditivo : (1: (2: (3: [])))
36
Aspectos especficos
fac (n-1)
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
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
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
Las funciones dependen de argumentos que se evalan cuando son necesarios para seguir)
take n [1..]
39
Aspectos especficos
Notacin listas, especificacin Definicin funciones Inferencia de tipos polimrficos Funciones de orden superior Evaluacin retardada
Programa fuente
Anlisis semntico
Ncleo Funcional
Optimizacin
Paquete de ejecucin
Generacin de cdigo
Cdigo generado (C) Paquete de ejecucin
Compilador C
Cdigo mquina
40
Aspectos especficos
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
Pattern matching a estructuras de tipo if () else if () Especificaciones sobre listas a llamadas a funciones de orden
41
Aspectos especficos
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 hijo2
Aspectos especficos
43
Aspectos especficos
L = [] reverse L = [3]
pila
44
Aspectos especficos
Problema: hay que guardar x como parte del entorno de la funcin devuelta. Funciones locales activas
g x=4
pila
45
Aspectos especficos
< ,
>
pila
En montculo
46
Aspectos especficos
Pila de Contexto
EP CSP
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
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
Aspectos especficos
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