SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
PASADO, PRESENTE Y FUTURO DE LOS LENGUAJES
DE PROGRAMACIÓN
Ricardo Peña Marí
Catedrático de Lenguajes y Sistemas Informáticos
Departamento de Sistemas Informáticos y Computación
Universidad Complutense de Madrid
Conferencias de Posgrado, Facultad de Informática UCM, junio de 2017
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 1 / 42
Introducción
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 2 / 42
Introducción
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 3 / 42
Introducción
El libro De Euclides a Java
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 4 / 42
Introducción
FORTRAN: John Backus, 1954-1957
C
C PROGRAMA QUE CALCULA EL MAXIMO COMUN DIVISOR DE DOS NUMEROS
C
INTEGER X, Y, A, B
READ (1,80) X, Y
A = X
B = Y
10 IF (A-B) 20, 30, 40
20 A = A - B
GO TO 10
40 B = B - A
GO TO 10
30 WRITE (2,90) A
80 FORMAT (2I5)
90 FORMAT (12H RESULTADO=,I5)
END
John Backus
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 5 / 42
Introducción
LISP: John McCarthy, 1957-1959
(DEFUN MAPLIST (F,XS)
(COND (NULL XS)
NIL
(CONS (F (CAR XS))
(MAPLIST F (CDR XS))
)
)
)
Programa que aplica una función F a cada ele-
mento de una lista XS
John McCarthy
Primer lenguaje en introdu-
cir:
• Recursión
• Orden superior
• Recolector de basura
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 6 / 42
Introducción
La crisis (1968)
• Durante los 60 se desarrollan gran cantidad de lenguajes de alto nivel:
ALGOL-60, COBOL, JOVIAL, MAD, NELLIAC, Algol-W, BASIC, GPSS,
SNOBOL,. . .
• La potencia del hardware también crece exponencialmente gracias al
desarrollo en esos años de los primeros circuitos integrados
• Aparición de la interrupción y, como consecuencia, de la multiprogramación
• Época de enormes desarrollos y enormes desastres. El punto de inexión lo
marca el fracaso del sistema operativo OS/360 de IBM (5.000 personas-año)
• El límite de los sistemas razonablemente ables se sitúa alrededor de las
100.000 líneas de código
• Los lenguajes PL/I y Algol 68 contribuyen a la crisis
• Reconocimiento ocial de lo inapropiado de la tecnología software:
Conferencia de Garmisch (1968) sobre Ingeniería de la Programación
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 7 / 42
Introducción
Hitos posteriores más relevantes
1970-74 Programación estructurada, Pascal (N. Wirth)
1972- Programación lógica, Prolog (A. Comerauer)
1968-74 Semáforos, monitores, (E.W. Dijkstra, C.A.R. Hoare)
1972-80 Tipos abstractos de datos, CLU, Modula-2, Ada
1978-85 Procesos secuenciales comunicantes, Occam (INMOS Ltd.)
1980-83 Orientación a objetos, Smalltalk (A. Kay), C++ (B. Stroustrup)
1978-90 Programación funcional, Hope, SML, Miranda, Haskell
1993- Paralelismo de datos, High Performance Fortran
1995- Navegadores de Internet, Java
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 8 / 42
Introducción
Enumeración de aspectos
• Es difícil clasicar la ingente cantidad de lenguajes desarrollados desde 1960.
• Ciertos aspectos aparecen por primera vez en alguno de ellos, pero luego son
incorporados a lenguajes posteriores.
• Es preferible hablar de aspectos de interés, y de su evolución, e indicar para
cada lenguaje cuáles de dichos aspectos incorpora.
• El aspecto más relevante es el modelo de cómputo:
• paradigma imperativo
• paradigma lógico
• paradigma funcional
• Otros aspectos relevantes:
• encapsulamiento y modularidad
• concurrencia y paralelismo
• sistemas de tipos
• resolución de restricciones
• metaprogramación
• generación dinámica de HTML
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 9 / 42
Modelos de cómputo
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 10 / 42
Modelos de cómputo
El paradigma imperativo
• Sus lenguajes representan una abstracción de la máquina hardware
sudyacente.
• El cómputo se concibe como una transformación incremental del estado.
• La instrucción estrella es la de asignación, de la forma x := exp, donde x es
una variable, posiblemente subindicada.
• Esta instrucción se corresponde con el trasiego de datos entre la memoria y la
unidad de proceso.
• El resto de las instrucciones se dedican a indicar el orden preciso en que se
realizan estas asignaciones y a variar los subíndices.
• De esta forma, el cómputo avanza modicando incrementalmente el estado
hasta alcanzar el estado nal deseado.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 11 / 42
Modelos de cómputo
El paradigma lógico (1)
1) descendiente(X,Y) :- hijo(X,Y).
2) descendiente(X,Y) :- hijo(Z,Y), descendiente(X,Z).
3) hermano(X,Y) :- hijo(X,Z), hijo(Y,Z), X /= Y.
4) sobrino(X,Y) :- hermano(Y,Z), descendiente(X,Z).
5) hijo(miguel,pedro).
6) hijo(sonia,pedro).
7) hijo(sonia,juana).
8) hijo(laura,juana).
9) hijo(luis, sonia).
10) hijo(antonio,sonia).
11) hijo(olga,luis).
12) hijo(diana,antonio).
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 12 / 42
Modelos de cómputo
El paradigma lógico (2)
• El programa no especica el orden de ejecución, sino que dene un conjunto
de propiedades y hechos.
• La repetición de cómputos está implícita en la recursión.
• Los condicionales están implíctos en la elección de cláusula mediante un
ajuste de patrones especial llamado unicación.
• Varias respuestas ante una misma pregunta (no determinismo):
hermano(sonia,X)?  X = miguel; X = laura
• Ejecución reversible:
descendiente(X,pedro)? versus descendiente(diana,Y)?
• La corrección de cada cláusula se puede inspeccionar independientemente
• El cómputo avanza mediante pasos de resolución, que pueden entenderse
como una forma de deducción.
• Reducción de un orden de magnitud en el número de líneas de código fuente
frente al paradigma imperativo.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 13 / 42
Modelos de cómputo
El paradigma funcional (1)
data Ord a = Arbus a = Vacio | Unir (Arbus a) a (Arbus a)
insertar :: Ord a = a - Arbus a - Arbus a
insertar x Vacio = Unir Vacio x Vacio
insertar x (Unir i y d)
| x  y = Unir i y (insertar x d)
| x == y = Unir i y d
| x  y = Unir (insertar x i) y d
crear :: Ord A = [a] - Arbus a
crear = foldr insertar Vacio
inorden :: Ord a = Arbus a - [a]
inorden Vacio = []
inorden (Unir i x d) = inorden i ++ [x] ++ inorden d
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 14 / 42
Modelos de cómputo
El paradigma funcional (2)
• Ausencia de estado mutable: Ejecutar ≡ Simplicar una expresión
• El paso elemental de ejecución es la β-reducción, consistente en reemplazar
una parte izquierda por la correspondiente parte derecha de una denición.
• No hay control de secuencia, salvo la implícita en las dependencias de datos.
• El recorrido recursivo de las estructuras de datos se encapsula en funciones
polimórcas de orden superior.
• Con ello se dispone de un amplio catálogo de bloques genéricos reutilizables:
foldr :: (a - b - b) - b - [a] - b
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
• Introdujeron el sistema polimórco de tipos y la inferencia automática.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 15 / 42
Modelos de cómputo
El paradigma funcional (3)
• En realidad, el paradigma funcional aporta dos modelos de cómputo:
• La evaluación impaciente: corresponde al paso de parámetros por valor.
• La evaluación perezosa: termina más a menudo que la impaciente, no
realiza cálculos innecesarios, y admite objetos innitos:
nats = 0 : map (+1) nats
• Otra aportación es el orden superior: las funciones son tratadas como valores
a todos los efectos. Pueden ser parámetros o/y resultados de otras funciones,
almacenadas en estructuras de datos, y denidas dinámicamente.
• Su uso disminuye el esfuerzo de programación y la introducción de errores.
• Programar se parece más a componer piezas que a crear código nuevo.
• El paradigma imperativo soporta una versión más limitada del orden superior
y la presencia de posibles efectos laterales limita aún más dicho uso.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 16 / 42
Encapsulamiento y modularidad
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 17 / 42
Encapsulamiento y modularidad
Abstracciones y facilidades de ocultamiento
• Los primeros LP incluían tan solo procedimientos y funciones con parámetros
como único mecanismo de abstracción.
• Ello permitió un cierto grado de encapsulamiento ya que es posible utilizar
una función sin conocer cómo está implementada.
• Pero es insuciente para basar en ella la descomposición modular de un
programa grande.
• La abstracción llegó algo mas tarde a las representaciones de datos con la
aparición del concepto de tipo abstracto de datos.
• Dicho concepto, junto con la creación dinámica de objetos, conteniendo cada
uno un valor del tipo abstracto, dio lugar a la idea de clase de la
programación orientada objetos.
• Basados en estas ideas, la mayoría de los lenguajes incluyen actualmente
alguna noción de módulo que permita exportar al entorno circundante cierta
información, y a la vez que se oculta otra.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 18 / 42
Encapsulamiento y modularidad
Los tipos abstractos de datos
• Concepto acuñado hacia 1972. Aportaciones:
1 Una noción de ocultamiento de la representación de un tipo
2 Una interfaz visible: conjunto de operaciones que operan con valores del tipo
3 Una técnica de especicación formal del comportamiento observable
4 Un concepto de genericidad: tipos pasados como parámetros a un tipo.
• Da lugar a un nuevo concepto de módulo y a nuevos ámbitos de visibilidad de
los identicadores.
• Produce herramientas de prototipado y de demostración de propiedades
basadas en técnicas de reescritura.
• Lenguajes pioneros: CLU (B. Liskov, 1974), Modula (N. Wirth, 1975), Ada
(DoD, 1975-1980).
• También son uno de los orígenes de los lenguajes orientados a objetos:
Smalltalk (A. Kay, 1980), C++ (B. Stroustrup, 1983), Java (J. Gosling,
1995)
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 19 / 42
Encapsulamiento y modularidad
La programación orientada a objetos (1)
• El segundo origen de la POO es la noción de herencia introducida por
primera vez en un derivado de Algol-60, Simula 67 (Nygaard y Dahl, 1967)
• El paradigma, tal como hoy lo conocemos, se debe a la visión de Alan Kay
(Todo son objetos) y a su lenguaje Smalltalk:
1 Lenguaje compilado a una máquina virtual
2 Creación dinámica de objetos, recolector de basura
3 Conceptos de clase, subclase, vinculación dinámica, clase abstracta,. . .
4 Entorno gráco interactivo, el primero basado en ventanas e iconos
5 Amplia librería de clases con estructura jerárquica
• La herencia es un potente factor de reutilización: la subclase solo necesita
denir los campos y métodos adicionales a los de la superclase .
• C++ añade la eciencia necesaria para que el paradigma se difunda en la
industria.
• Java añade la independencia de la máquina, el código móvil y el maridaje con
los navegadores de Internet.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 20 / 42
Encapsulamiento y modularidad
La programación orientada a objetos (2)
// Clase para manipular fechas
public class Fecha {
// Construye una fecha por defecto
public Fecha ( )
{ dia = 1; mes = 1; año = 2000 }
// Construye una fecha concreta
public Fecha (int d, int m, int a)
{ dia = d; mes = m; año = a }
public boolean MayorQue (Fecha f2)
{ return año  f2.año ||
año == f2.año 
(mes  f2.mes ||
mes == f2.mes  dia  f2.dia);
}
// Atributos privados de la clase
private int dia;
private int mes;
private int año;
}
Una clase escrita en Java
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 21 / 42
Concurrencia y paralelismo
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 22 / 42
Concurrencia y paralelismo
Concurrencia (1)
• La disparidad entre la velocidad de la unidad de proceso y la de los periféricos
condujo en los años 1960 a la invención de la interrupción, y con ella al
paradigma de programación concurrente.
• La multiprogramación (i.e. los procesos concurrentes en una sola máquina)
trajo consigo nuevos tipos de errores:
• corrupción de los datos accedidos concurrentemente
• errores dependientes del tiempo
• interbloqueos
• inanición
• Se tardaron muchos años en comprender el fenómeno. Fueron determinantes
los trabajos de E.W. Dijkstra, y C.A.R. Hoare (1965-1975).
• Los primeros mecanismos, semáforos, regiones críticas, monitores, presuponen
la existencia de una memoria común.
• Los siguientes, mensajes asíncronos, mensajes síncronos, llamada remota o
rendezvous, pueden aplicarse tanto a memoria compartida como distribuida.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 23 / 42
Concurrencia y paralelismo
Concurrencia (2)
• La concurrencia se considera hoy el modo natural de organizar las tareas de
los sistemas operativos, y de los sistemas que controlan procesos de la
realidad (centrales telefónicas, servidores web, plantas industriales, etc.).
• El primer lenguaje de amplio uso en incorporar mecanismos concurrentes fue
Ada (1980).
• Actualmente todos los LP imperativos incorporan alguna noción de hebra
concurrente y mecanismos para sincronizarlas.
• Los lenguajes funcionales y lógicos también tienen versiones concurrentes:
Concurrent Haskell, Concurrent ML, Prolog Concurrente, P-Prolog.
• Algunos de ellos, como Erlang, han nacido directamente con la pretensión de
programar sistemas distribuidos con miles de procesos y docenas de máquinas
para albergarlos.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 24 / 42
Concurrencia y paralelismo
Paralelismo (1)
• La programación paralela tiene como objetivo explotar al máximo la
capacidad de cálculo de un conjunto de procesadores.
• Se utiliza para rebajar el tiempo de algoritmos intensivos en cómputo:
predicción meteorológica, plegado de proteinas, factorización de números ...
• Los objetivos principales son repartir la carga del modo más uniforme posible,
y disminuir el proceso dedicado a comunicaciones.
• Hay dos modelos básicos de cómputo, el paralelismo de tareas y el
paralelismo de datos.
• En el primero, el programador crea una estructura de procesos (p.e. esquemas
divide y vencerás, en tubería, de trabajadores replicados, etc.) y no todas las
tareas realizan el mismo trabajo.
• En el segundo, el programador es responsable de distribuir los datos entre los
procesadores, pero existe un solo código secuencial que es ejecutado
síncronamente por todos ellos.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 25 / 42
Concurrencia y paralelismo
Paralelismo (2)
• En el modelo de paralelismo de datos el LP estándar es High Performance
Fortran (1993), una variante de Fortran 90 con directivas para la distribución.
• En el paradigma funcional, Data Parallel Haskell (2007), también implementa
dicho modelo.
• En el modelo de paralelismo de tareas hay dos estándares de librerías de paso
de mensajes: PVM (Parallel Virtual Machine, 1990) y MPI (Message Passing
Interface, 1993) .
• El paralelismo, además de un paradigma con lenguajes propios, también es un
mecanismo de implementación de los lenguajes, especialmente en el ámbito
declarativo (Eden, Glasgow Parallel Haskell, Parallel Prolog).
• En estos lenguajes, el programador no necesita especicar el orden de las
acciones. El compilador y el sistema de soporte organizan la ejecución en
paralelo de partes del programa que no intereran entre sí. Las oportunidades
son muchas debido a la ausencia de efectos laterales.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 26 / 42
Sistemas de tipos
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 27 / 42
Sistemas de tipos
Evolución de los sistemas de tipos
• Los tipos de los primeros lenguajes se correspondían casi exactamente con los
soportados por el hardware.
• Más adelante, se formaron dos corrientes: los que defendían una disciplina de
tipos, en la que toda variable se declara con un tipo y el compilador fuerza un
uso compatible con el mismo, y los que defendían un lenguaje sin tipos en
tiempo de compilación.
• A la primera pertenecen por ejemplo Algol-60, Pascal, Ada y Java.
• A la segunda, Lisp, Prolog y Erlang.
• Los defensores de la primera alegan seguridad, los de la segunda exibilidad.
• Los lenguajes funcionales (SML, 1980) encontraron el sistema de tipos con
polimorsmo paramétrico, que parece reunir lo mejor de ambos mundos.
• Por un lado, no es necesario declarar el tipo de las variables. Por otro, una
variable o una función pueden tener muchos tipos, lo que va a favor de la
exibilidad.
map :: (a - b) - [a] - [b]
map f [] = []
map f (x:xs) = f x : map f xs
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 28 / 42
Sistemas de tipos
El polimorsmo de subtipos
• Los lenguajes orientados a objetos soportan el llamado polimorsmo de
subtipos, según el cual un objeto de una subclase es admisible en cualquier
parte del texto donde sea admisible uno de la superclase.
• También suministran un tipo universal Object del cual toda clase es subtipo.
• Con ello es posible tener las ventajas del polimorsmo paramétrico, y otras
adicionales como crear una lista con objetos de tipos distintos. En ese caso, a
costa de la seguridad, o de introducir comprobaciones dinámicas.
• También soportan una forma de tipado en tiempo de ejecución, la vinculación
dinámica, que escoge el método aplicable a un objeto según el tipo de este.
• Ello obliga a tener una representación en ejecución del tipo de un objeto.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 29 / 42
Sistemas de tipos
La sobrecarga
• Se llama sobrecarga al hecho de poder emplear el mismo nombre para
operaciones distintas de un LP. Algunas operaciones tales como
+, −, ∗, ≤, están sobrecargadas en la mayoría de los lenguajes.
• A partir de Ada, la sobrecarga se permite también para las operaciones
denidas por el usuario.
• Los lenguajes orientados a objetos, como C++ y Java, también la permiten.
Un uso frecuente es denir distintos constructores de un objeto, todos ellos
con el mismo nombre.
• El compilador determina la función apropiada en base al número y tipo de los
argumentos.
• Haskell introduce las llamadas clases de tipos para denir operaciones
sobrecargadas:
quicksort :: Ord a = [a] - [a]
• Las clases abstractas y las interfaces de Java, proporcionan facilidades muy
similares.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 30 / 42
Sistemas de tipos
La genericidad
• Es una consecuencia directa de la teoría de tipos abstractos de datos (TAD)
desarrollada durante los años 1970-80.
• Un TAD puede estar parametrizado por otros TADs anónimos de los que solo
se conocen algunas de sus operaciones. Ejemplo: árbol binario de búsqueda
de elementos provistos de una relación de orden.
• El primer LP que soportó la genericidad fue Ada: permite la declaración de un
package, procedure o function genéricos.
• Pueden recibir como parámetros tipos, operaciones y constantes. Para tener
construcciones ejecutables, ha de concretarse la construcción genérica con
parámetros reales que reemplacen a los formales.
• La versión de C++ de 1990 incluyó las templates, clases que pueden recibir
como parámetros tipos, otras clases, o constantes.
• Las versiones más modernas de Java también incluyen esta facilidad.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 31 / 42
Sistemas de tipos
Otra forma de genericidad: el politipismo
• Permite denir operaciones aplicables a todos los tipos de datos, actuales o
futuros. La denición se hace por inducción sobre la estructura del tipo.
• De momento, solo lo soportan los lenguajes funcionales:
class Sized a where
size :: a - Int
size a = gsize (from a)
class GSized f where
gsize :: f a - Int
instance GSized U1 where
gsize U1 = 0
instance (GSized a, GSized b) = GSized (a :*: b) where
gsize (x :*: y) = gsize x + gsize y
instance (GSized a, GSized b) = GSized (a :+: b) where
gsize (L1 x) = gsize x
gsize (R1 x) = gsize x
instance (GSized f) = GSized (M1 i c f) where
gsize (M1 x) = gsize x
instance Sized a = GSized (K1 i a) where
gsize (K1 x) = size x
instance Sized Int where
size x = 1
instance Sized Char where
size x = 1
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 32 / 42
Sistemas de tipos
Resumen de las aportaciones de los tipos
• Los tipos estáticos comenzaron siendo un factor de seguridad: el tipo se
analiza durante la compilación y ello asegura que en ejecución se preservará.
• Forzar tipos correctos en tiempo de compilación:
1 Detecta errores o despistes con una ínma inversión de esfuerzo
2 Asegura que no se producirán errores de tipos en ninguna ejecución
• Compárese con analizar los tipos en ejecución y con programar sin tipos.
• Las diversas formas de polimorsmo, la sobrecarga, la genericidad y el
politipismo los convierte además en un potente factor de reutilización:
• Cuanto más general sea el tipo de un componente, en más contextos puede
ser aceptado como válido, y por tanto puede ser más reutilizado
• Programar sin tipos debería reservarse solo para resolver situaciones
excepcionales y solo para programadores expertos.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 33 / 42
Otros aspectos relevantes
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 34 / 42
Otros aspectos relevantes
La programación con restricciones
• Existen lenguajes especializados para expresar y resolver problemas con
restricciones desde los años 1970. Son lenguajes de propósito especíco.
• Un problema de este tipo consta de los siguientes elementos:
• CSP ≡ (V, D, C) COP ≡ (V, D, C, F).
• Variables: V ≡ {v1, v2, . . . , vn }
• Dominios: D ≡ {d1, d2, . . . , dn }
• Restricciones: C ≡ {c1, c2, . . . , cm }
• Candidatos: combinaciones que asignan a cada vi un valor de di .
• Resolver: consiste en encontrar candidatos que satisfagan C.
• Optimizar: consiste además en minimizar/maximizar una función objetivo F.
• Desde cualquier LP se puede utilizar una librería CSP/COP, pero el
paradigma lógico ha integrado la resolución de restricciones de forma
bastante natural.
• A partir de 1987 aparecen los lenguajes lógicos con restricciones (Constraint
Logic Programming, o CLP). Todas las versiones actuales de Prolog incluyen
el uso de las mismas.
• Tipos de restricciones: dominios nitos, igualdad, ≤, lineales sobre reales,
racionales o enteros, cuadráticas, ...
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 35 / 42
Otros aspectos relevantes
La metaprogramación
• También llamada reexividad (reection), es la posibilidad de condicionar la
compilación desde el propio del programa en compilación.
• Los primeros antecedentes son el sistema de macros de LISP, y los
preprocesadores de C para realizar por ejemplo compilación condicional.
• Actualmente, todos los LP incluyen directivas de compilación o
preprocesadores para especializar la compilación. Con ellos es posible incluso
denir lenguajes empotrados dentro del lenguaje huesped.
• El lenguaje de plantillas de C++ es tan potente que permite denir cualquier
función computable (p.e. el factorial) para ser ejecutada durante la
compilación.
• En MetaML es posible escribir metacódigo que generará código en tiempo de
ejecución. Dicho código estará, no obstante, bien tipado.
• Template Haskell permite inspeccionar los tipos de los módulos ya
compilados, y generar código especializado para dichos tipos:
data T a = Tip a | Fork (T a) (T a)
reify :: Name - Q Info
info = reify T ...
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 36 / 42
Otros aspectos relevantes
Los lenguajes de script
• La aparición de Internet y la necesidad de un creciente trasiego de páginas
HTML y XML entre servidores y clientes, desató toda una pléyade de nuevas
tecnologías y lenguajes.
• Casi desde el principio hubo un deseo de dotar a dichas páginas de animación
e interactividad.
• Muy pronto surgieron los llamados lenguajes de script, lenguajes todo-terreno
cuyo objetivo inicial era crear dinámicamente páginas HTML.
• Se les dotó de acceso a los mandatos del sistema operativo y a las bases de
datos subyacentes con el n de manipular cheros, ejecutar programas, y
obtener o modicar información.
• Aunque podríamos considerar de propósito especico estos lenguajes, de
hecho engloban en su seno lenguajes de programación completos y se
escriben en ellos aplicaciones de creciente complejidad.
• Ejemplos: JavaScript, JSP, PHP, Ruby, Python (via API), ...
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 37 / 42
El presente y el futuro
Índice
1 Introducción
2 Modelos de cómputo
3 Encapsulamiento y modularidad
4 Concurrencia y paralelismo
5 Sistemas de tipos
6 Otros aspectos relevantes
7 El presente y el futuro
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 38 / 42
El presente y el futuro
El presente: la confusión de las lenguas
• El momento actual se caracteriza por la combinación de varios paradigmas en
un mismo lenguaje:
• Programación lógico-funcional (Curry, TOY)
• Programación funcional-concurrente (Erlang, Concurrent Haskell)
• Programación funcional-paralela (GPH, Eden, Data Parallel Haskell)
• Programación lógico-funcional-concurrente-orientada a objetos (Oz)
• A la vez, los lenguajes imperativos orientados objetos incorporan un creciente
número de construcciones funcionales:
• JavaSript: maps, folds, closures
• Java 8: maps, folds, lambda abstractions
• Ruby: lambda abstractions, closures, rst-class continuations
• Python: map, reduce, lter, list comprehensions, lambda abstractions
• Y algunos lenguajes funcionales incorporan facilidades para la orientación a
objetos: Scala, F
#
• ¾Estamos combinando lo mejor de ambos mundos?
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 39 / 42
El presente y el futuro
El presente: la confusión de las lenguas
• El momento actual se caracteriza por la combinación de varios paradigmas en
un mismo lenguaje:
• Programación lógico-funcional (Curry, TOY)
• Programación funcional-concurrente (Erlang, Concurrent Haskell)
• Programación funcional-paralela (GPH, Eden, Data Parallel Haskell)
• Programación lógico-funcional-concurrente-orientada a objetos (Oz)
• A la vez, los lenguajes imperativos orientados objetos incorporan un creciente
número de construcciones funcionales:
• JavaSript: maps, folds, closures
• Java 8: maps, folds, lambda abstractions
• Ruby: lambda abstractions, closures, rst-class continuations
• Python: map, reduce, lter, list comprehensions, lambda abstractions
• Y algunos lenguajes funcionales incorporan facilidades para la orientación a
objetos: Scala, F
#
• ¾Estamos combinando lo peor de ambos mundos?
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 39 / 42
El presente y el futuro
El presente: el abandono del tipado estático
• La mayor parte de los lenguajes de script son interpretados y tienen tipado
dinámico: Ruby, PHP, Python, JavaScript, ...
• Ello presenta dos inconvenientes:
• Necesitan mas memoria y más tiempo, para poder comprobar los tipos
en ejecución.
• Solo se detectan los errores de tipos en los caminos realmente
ejecutados.
• Además, la mayoría de ellos convierten automáticamente unos tipos en otros
con excesiva exibilidad (p.e. en Phyton las variables adquieren tipo al ser
asignadas, en JavaScript, 5 * 5 devuelve 25, pero a * 5 es un error).
• Lo cual, unido a la mezcla de paradigmas, y a las amplias facilidades de
metaprogramación que soportan, hace que estos lenguajes sean muy
peligrosos de usar por programadores no expertos.
• ¾Vamos hacia una nueva crisis del software?
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 40 / 42
El presente y el futuro
El futuro (1)
• Resumiendo, la evolución de los LP ha ido en las siguientes direcciones:
1 Un creciente nivel de abstracción: tipos denidos por el usuario, tipos
abstractos, clases, funciones de orden superior, construcciones para la
concurrencia, etc.
2 Mecanismos de modularidad, que permiten independizar unas partes del
programa de otras.
3 Mecanismos de seguridad estática: los sistemas de tipos protegen de errores
triviales que de otro modo pasarían inadvertidos. A la vez tienen la suciente
exibilidad para no constreñir excesivamente al programador.
4 Potenciamiento de la reutilización: los tipos polimórcos, la sobrecarga, la
genericidad, la modularidad y el orden superior, potencian la creación de
componentes reutilizables, bien tal cual son, bien previa adaptación.
• En mi opinión, estas tendencias se van a mantener en el futuro porque han
demostrado ser capaces de mantener bajo control los siempre crecientes
complejidad y volumen de los sistemas software.
• Pero no se debe bajar la guardia y volver a escribir los programas de modo
artesanal, como está ocurriendo con las tecnologías asociadas a Internet.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 41 / 42
El presente y el futuro
El futuro (2)
Unas notas nales sobre el papel que estimo jugarán los futuros compiladores:
• Hasta ahora estos se han ocupado fundamentalmente de garantizar la
corrección sintáctica y de tipos de los programas, además de haber puesto un
énfasis comprensible en generar un código lo más eciente posible.
• Pero les aguardan tareas de mayor responsabilidad, en base a los avances de
los últimos años en las técnicas de análisis estático:
• demostrar la terminación de bucles
• sintetizar invariantes para los mismos
• estimar cotas superiores al coste en tiempo y en memoria de los programas
• demostrar la ausencia de bloqueo de los programas concurrentes
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 42 / 42
El presente y el futuro
El futuro (2)
Unas notas nales sobre el papel que estimo jugarán los futuros compiladores:
• Hasta ahora estos se han ocupado fundamentalmente de garantizar la
corrección sintáctica y de tipos de los programas, además de haber puesto un
énfasis comprensible en generar un código lo más eciente posible.
• Pero les aguardan tareas de mayor responsabilidad, en base a los avances de
los últimos años en las técnicas de análisis estático:
• demostrar la terminación de bucles
• sintetizar invariantes para los mismos
• estimar cotas superiores al coste en tiempo y en memoria de los programas
• demostrar la ausencia de bloqueo de los programas concurrentes
CODA
• Los programas son entidades tremendamente complejas, pero a diferencia de
otros productos de la ingeniería, son absolutamente predecibles y no sufren
desgaste por el uso.
• Nuestra obligación es dominarlos e impedir que ellos nos dominen.
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 42 / 42
El presente y el futuro
El futuro (2)
Unas notas nales sobre el papel que estimo jugarán los futuros compiladores:
• Hasta ahora estos se han ocupado fundamentalmente de garantizar la
corrección sintáctica y de tipos de los programas, además de haber puesto un
énfasis comprensible en generar un código lo más eciente posible.
• Pero les aguardan tareas de mayor responsabilidad, en base a los avances de
los últimos años en las técnicas de análisis estático:
• demostrar la terminación de bucles
• sintetizar invariantes para los mismos
• estimar cotas superiores al coste en tiempo y en memoria de los programas
• demostrar la ausencia de bloqueo de los programas concurrentes
CODA
• Los programas son entidades tremendamente complejas, pero a diferencia de
otros productos de la ingeniería, son absolutamente predecibles y no sufren
desgaste por el uso.
• Nuestra obligación es dominarlos e impedir que ellos nos dominen.
½MUCHAS GRACIAS!
R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 42 / 42

Contenu connexe

Similaire à Los lenguajes de programación pasado presente y futuro

1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...
1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...
1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...LeonelCortes5
 
Arquitecturas y modelos de programación en computación grid (1)
Arquitecturas y modelos de programación en computación grid (1)Arquitecturas y modelos de programación en computación grid (1)
Arquitecturas y modelos de programación en computación grid (1)Tensor
 
Cabrera_Modelos_progr_lineal.pdf
Cabrera_Modelos_progr_lineal.pdfCabrera_Modelos_progr_lineal.pdf
Cabrera_Modelos_progr_lineal.pdfjaqs231
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
20090723 Presentacion Pfc
20090723 Presentacion Pfc20090723 Presentacion Pfc
20090723 Presentacion Pfcazubi
 
20090723 Presentacion Pfc
20090723 Presentacion Pfc20090723 Presentacion Pfc
20090723 Presentacion Pfcazubi
 
Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacionLuis Peralta
 
Presentacion Pfc
Presentacion PfcPresentacion Pfc
Presentacion Pfcguest99072d
 
Objetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetosObjetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetosjeavilah
 
Ingeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación BásicaIngeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación Básicagiseproi
 
Librodeinvestigacion francisco-chediak
Librodeinvestigacion francisco-chediakLibrodeinvestigacion francisco-chediak
Librodeinvestigacion francisco-chediakjhonn Fuentes
 
Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Lucero Mtz
 
Estructura silvia
Estructura silviaEstructura silvia
Estructura silviaSilvia Mera
 

Similaire à Los lenguajes de programación pasado presente y futuro (20)

1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...
1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...
1.1. Conceptos preliminares sobre la evolucion y desarrollo de los leguajes d...
 
Arquitecturas y modelos de programación en computación grid (1)
Arquitecturas y modelos de programación en computación grid (1)Arquitecturas y modelos de programación en computación grid (1)
Arquitecturas y modelos de programación en computación grid (1)
 
Paradigmas
ParadigmasParadigmas
Paradigmas
 
Cabrera_Modelos_progr_lineal.pdf
Cabrera_Modelos_progr_lineal.pdfCabrera_Modelos_progr_lineal.pdf
Cabrera_Modelos_progr_lineal.pdf
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
Base datos f06
Base datos f06Base datos f06
Base datos f06
 
20090723 Presentacion Pfc
20090723 Presentacion Pfc20090723 Presentacion Pfc
20090723 Presentacion Pfc
 
20090723 Presentacion Pfc
20090723 Presentacion Pfc20090723 Presentacion Pfc
20090723 Presentacion Pfc
 
Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacion
 
Clustering of Similar Values, in Spanish, for the Improvement of Search Systems
Clustering of Similar Values, in Spanish, for the Improvement of Search SystemsClustering of Similar Values, in Spanish, for the Improvement of Search Systems
Clustering of Similar Values, in Spanish, for the Improvement of Search Systems
 
Analisis Proyecto TETRAD V
 Analisis Proyecto TETRAD V Analisis Proyecto TETRAD V
Analisis Proyecto TETRAD V
 
1 eda teo
1 eda teo1 eda teo
1 eda teo
 
Presentacion Pfc
Presentacion PfcPresentacion Pfc
Presentacion Pfc
 
Objetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetosObjetos: 2. Introducción a la programación orientada a objetos
Objetos: 2. Introducción a la programación orientada a objetos
 
Ingeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación BásicaIngeniería Catastral y Geodesia - Syllabus Programación Básica
Ingeniería Catastral y Geodesia - Syllabus Programación Básica
 
Librodeinvestigacion francisco-chediak
Librodeinvestigacion francisco-chediakLibrodeinvestigacion francisco-chediak
Librodeinvestigacion francisco-chediak
 
Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015
 
Estructura silvia
Estructura silviaEstructura silvia
Estructura silvia
 
Programación
ProgramaciónProgramación
Programación
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 

Plus de Facultad de Informática UCM

¿Por qué debemos seguir trabajando en álgebra lineal?
¿Por qué debemos seguir trabajando en álgebra lineal?¿Por qué debemos seguir trabajando en álgebra lineal?
¿Por qué debemos seguir trabajando en álgebra lineal?Facultad de Informática UCM
 
TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...
TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...
TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...Facultad de Informática UCM
 
DRAC: Designing RISC-V-based Accelerators for next generation Computers
DRAC: Designing RISC-V-based Accelerators for next generation ComputersDRAC: Designing RISC-V-based Accelerators for next generation Computers
DRAC: Designing RISC-V-based Accelerators for next generation ComputersFacultad de Informática UCM
 
Tendencias en el diseño de procesadores con arquitectura Arm
Tendencias en el diseño de procesadores con arquitectura ArmTendencias en el diseño de procesadores con arquitectura Arm
Tendencias en el diseño de procesadores con arquitectura ArmFacultad de Informática UCM
 
Introduction to Quantum Computing and Quantum Service Oriented Computing
Introduction to Quantum Computing and Quantum Service Oriented ComputingIntroduction to Quantum Computing and Quantum Service Oriented Computing
Introduction to Quantum Computing and Quantum Service Oriented ComputingFacultad de Informática UCM
 
Inteligencia Artificial en la atención sanitaria del futuro
Inteligencia Artificial en la atención sanitaria del futuroInteligencia Artificial en la atención sanitaria del futuro
Inteligencia Artificial en la atención sanitaria del futuroFacultad de Informática UCM
 
Design Automation Approaches for Real-Time Edge Computing for Science Applic...
 Design Automation Approaches for Real-Time Edge Computing for Science Applic... Design Automation Approaches for Real-Time Edge Computing for Science Applic...
Design Automation Approaches for Real-Time Edge Computing for Science Applic...Facultad de Informática UCM
 
Estrategias de navegación para robótica móvil de campo: caso de estudio proye...
Estrategias de navegación para robótica móvil de campo: caso de estudio proye...Estrategias de navegación para robótica móvil de campo: caso de estudio proye...
Estrategias de navegación para robótica móvil de campo: caso de estudio proye...Facultad de Informática UCM
 
Fault-tolerance Quantum computation and Quantum Error Correction
Fault-tolerance Quantum computation and Quantum Error CorrectionFault-tolerance Quantum computation and Quantum Error Correction
Fault-tolerance Quantum computation and Quantum Error CorrectionFacultad de Informática UCM
 
Cómo construir un chatbot inteligente sin morir en el intento
Cómo construir un chatbot inteligente sin morir en el intentoCómo construir un chatbot inteligente sin morir en el intento
Cómo construir un chatbot inteligente sin morir en el intentoFacultad de Informática UCM
 
Automatic generation of hardware memory architectures for HPC
Automatic generation of hardware memory architectures for HPCAutomatic generation of hardware memory architectures for HPC
Automatic generation of hardware memory architectures for HPCFacultad de Informática UCM
 
Hardware/software security contracts: Principled foundations for building sec...
Hardware/software security contracts: Principled foundations for building sec...Hardware/software security contracts: Principled foundations for building sec...
Hardware/software security contracts: Principled foundations for building sec...Facultad de Informática UCM
 
Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...
Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...
Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...Facultad de Informática UCM
 
Redes neuronales y reinforcement learning. Aplicación en energía eólica.
Redes neuronales y reinforcement learning. Aplicación en energía eólica.Redes neuronales y reinforcement learning. Aplicación en energía eólica.
Redes neuronales y reinforcement learning. Aplicación en energía eólica.Facultad de Informática UCM
 
Challenges and Opportunities for AI and Data analytics in Offshore wind
Challenges and Opportunities for AI and Data analytics in Offshore windChallenges and Opportunities for AI and Data analytics in Offshore wind
Challenges and Opportunities for AI and Data analytics in Offshore windFacultad de Informática UCM
 

Plus de Facultad de Informática UCM (20)

¿Por qué debemos seguir trabajando en álgebra lineal?
¿Por qué debemos seguir trabajando en álgebra lineal?¿Por qué debemos seguir trabajando en álgebra lineal?
¿Por qué debemos seguir trabajando en álgebra lineal?
 
TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...
TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...
TECNOPOLÍTICA Y ACTIVISMO DE DATOS: EL MAPEO COMO FORMA DE RESILIENCIA ANTE L...
 
DRAC: Designing RISC-V-based Accelerators for next generation Computers
DRAC: Designing RISC-V-based Accelerators for next generation ComputersDRAC: Designing RISC-V-based Accelerators for next generation Computers
DRAC: Designing RISC-V-based Accelerators for next generation Computers
 
uElectronics ongoing activities at ESA
uElectronics ongoing activities at ESAuElectronics ongoing activities at ESA
uElectronics ongoing activities at ESA
 
Tendencias en el diseño de procesadores con arquitectura Arm
Tendencias en el diseño de procesadores con arquitectura ArmTendencias en el diseño de procesadores con arquitectura Arm
Tendencias en el diseño de procesadores con arquitectura Arm
 
Formalizing Mathematics in Lean
Formalizing Mathematics in LeanFormalizing Mathematics in Lean
Formalizing Mathematics in Lean
 
Introduction to Quantum Computing and Quantum Service Oriented Computing
Introduction to Quantum Computing and Quantum Service Oriented ComputingIntroduction to Quantum Computing and Quantum Service Oriented Computing
Introduction to Quantum Computing and Quantum Service Oriented Computing
 
Computer Design Concepts for Machine Learning
Computer Design Concepts for Machine LearningComputer Design Concepts for Machine Learning
Computer Design Concepts for Machine Learning
 
Inteligencia Artificial en la atención sanitaria del futuro
Inteligencia Artificial en la atención sanitaria del futuroInteligencia Artificial en la atención sanitaria del futuro
Inteligencia Artificial en la atención sanitaria del futuro
 
Design Automation Approaches for Real-Time Edge Computing for Science Applic...
 Design Automation Approaches for Real-Time Edge Computing for Science Applic... Design Automation Approaches for Real-Time Edge Computing for Science Applic...
Design Automation Approaches for Real-Time Edge Computing for Science Applic...
 
Estrategias de navegación para robótica móvil de campo: caso de estudio proye...
Estrategias de navegación para robótica móvil de campo: caso de estudio proye...Estrategias de navegación para robótica móvil de campo: caso de estudio proye...
Estrategias de navegación para robótica móvil de campo: caso de estudio proye...
 
Fault-tolerance Quantum computation and Quantum Error Correction
Fault-tolerance Quantum computation and Quantum Error CorrectionFault-tolerance Quantum computation and Quantum Error Correction
Fault-tolerance Quantum computation and Quantum Error Correction
 
Cómo construir un chatbot inteligente sin morir en el intento
Cómo construir un chatbot inteligente sin morir en el intentoCómo construir un chatbot inteligente sin morir en el intento
Cómo construir un chatbot inteligente sin morir en el intento
 
Automatic generation of hardware memory architectures for HPC
Automatic generation of hardware memory architectures for HPCAutomatic generation of hardware memory architectures for HPC
Automatic generation of hardware memory architectures for HPC
 
Type and proof structures for concurrency
Type and proof structures for concurrencyType and proof structures for concurrency
Type and proof structures for concurrency
 
Hardware/software security contracts: Principled foundations for building sec...
Hardware/software security contracts: Principled foundations for building sec...Hardware/software security contracts: Principled foundations for building sec...
Hardware/software security contracts: Principled foundations for building sec...
 
Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...
Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...
Jose carlossancho slidesLa seguridad en el desarrollo de software implementad...
 
Do you trust your artificial intelligence system?
Do you trust your artificial intelligence system?Do you trust your artificial intelligence system?
Do you trust your artificial intelligence system?
 
Redes neuronales y reinforcement learning. Aplicación en energía eólica.
Redes neuronales y reinforcement learning. Aplicación en energía eólica.Redes neuronales y reinforcement learning. Aplicación en energía eólica.
Redes neuronales y reinforcement learning. Aplicación en energía eólica.
 
Challenges and Opportunities for AI and Data analytics in Offshore wind
Challenges and Opportunities for AI and Data analytics in Offshore windChallenges and Opportunities for AI and Data analytics in Offshore wind
Challenges and Opportunities for AI and Data analytics in Offshore wind
 

Dernier

Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processbarom
 
Presentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónPresentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónmaz12629
 
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfTIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfssuser202b79
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internamengual57
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cerealescarlosjuliogermanari1
 
FUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdfFUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdfalfredoivan1
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfwduranteg
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologicaJUDITHYEMELINHUARIPA
 
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdfsmendozap1
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptNombre Apellidos
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfRonaldLozano11
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZgustavoiashalom
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATevercoyla
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...GuillermoRodriguez239462
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTElisaLen4
 
Libro de ingeniería sobre Tecnología Eléctrica.pdf
Libro de ingeniería sobre Tecnología Eléctrica.pdfLibro de ingeniería sobre Tecnología Eléctrica.pdf
Libro de ingeniería sobre Tecnología Eléctrica.pdfCristinCrdova1
 
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdfAnálisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdfGabrielCayampiGutier
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potableFabricioMogroMantill
 
Trazos paileros para realizar trazos, cortes y calculos.pptx
Trazos paileros para realizar trazos, cortes y calculos.pptxTrazos paileros para realizar trazos, cortes y calculos.pptx
Trazos paileros para realizar trazos, cortes y calculos.pptxmiguelmateos18
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacionesRamon Bartolozzi
 

Dernier (20)

Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo process
 
Presentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónPresentacion de la ganaderia en la región
Presentacion de la ganaderia en la región
 
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfTIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 
Cereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. CerealesCereales tecnología de los alimentos. Cereales
Cereales tecnología de los alimentos. Cereales
 
FUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdfFUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdf
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
[1LLF] UNIDADES, MAGNITUDES FÍSICAS Y VECTORES.pdf
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdf
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Libro de ingeniería sobre Tecnología Eléctrica.pdf
Libro de ingeniería sobre Tecnología Eléctrica.pdfLibro de ingeniería sobre Tecnología Eléctrica.pdf
Libro de ingeniería sobre Tecnología Eléctrica.pdf
 
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdfAnálisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
Trazos paileros para realizar trazos, cortes y calculos.pptx
Trazos paileros para realizar trazos, cortes y calculos.pptxTrazos paileros para realizar trazos, cortes y calculos.pptx
Trazos paileros para realizar trazos, cortes y calculos.pptx
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 

Los lenguajes de programación pasado presente y futuro

  • 1. PASADO, PRESENTE Y FUTURO DE LOS LENGUAJES DE PROGRAMACIÓN Ricardo Peña Marí Catedrático de Lenguajes y Sistemas Informáticos Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid Conferencias de Posgrado, Facultad de Informática UCM, junio de 2017 R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 1 / 42
  • 2. Introducción Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 2 / 42
  • 3. Introducción Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 3 / 42
  • 4. Introducción El libro De Euclides a Java R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 4 / 42
  • 5. Introducción FORTRAN: John Backus, 1954-1957 C C PROGRAMA QUE CALCULA EL MAXIMO COMUN DIVISOR DE DOS NUMEROS C INTEGER X, Y, A, B READ (1,80) X, Y A = X B = Y 10 IF (A-B) 20, 30, 40 20 A = A - B GO TO 10 40 B = B - A GO TO 10 30 WRITE (2,90) A 80 FORMAT (2I5) 90 FORMAT (12H RESULTADO=,I5) END John Backus R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 5 / 42
  • 6. Introducción LISP: John McCarthy, 1957-1959 (DEFUN MAPLIST (F,XS) (COND (NULL XS) NIL (CONS (F (CAR XS)) (MAPLIST F (CDR XS)) ) ) ) Programa que aplica una función F a cada ele- mento de una lista XS John McCarthy Primer lenguaje en introdu- cir: • Recursión • Orden superior • Recolector de basura R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 6 / 42
  • 7. Introducción La crisis (1968) • Durante los 60 se desarrollan gran cantidad de lenguajes de alto nivel: ALGOL-60, COBOL, JOVIAL, MAD, NELLIAC, Algol-W, BASIC, GPSS, SNOBOL,. . . • La potencia del hardware también crece exponencialmente gracias al desarrollo en esos años de los primeros circuitos integrados • Aparición de la interrupción y, como consecuencia, de la multiprogramación • Época de enormes desarrollos y enormes desastres. El punto de inexión lo marca el fracaso del sistema operativo OS/360 de IBM (5.000 personas-año) • El límite de los sistemas razonablemente ables se sitúa alrededor de las 100.000 líneas de código • Los lenguajes PL/I y Algol 68 contribuyen a la crisis • Reconocimiento ocial de lo inapropiado de la tecnología software: Conferencia de Garmisch (1968) sobre Ingeniería de la Programación R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 7 / 42
  • 8. Introducción Hitos posteriores más relevantes 1970-74 Programación estructurada, Pascal (N. Wirth) 1972- Programación lógica, Prolog (A. Comerauer) 1968-74 Semáforos, monitores, (E.W. Dijkstra, C.A.R. Hoare) 1972-80 Tipos abstractos de datos, CLU, Modula-2, Ada 1978-85 Procesos secuenciales comunicantes, Occam (INMOS Ltd.) 1980-83 Orientación a objetos, Smalltalk (A. Kay), C++ (B. Stroustrup) 1978-90 Programación funcional, Hope, SML, Miranda, Haskell 1993- Paralelismo de datos, High Performance Fortran 1995- Navegadores de Internet, Java R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 8 / 42
  • 9. Introducción Enumeración de aspectos • Es difícil clasicar la ingente cantidad de lenguajes desarrollados desde 1960. • Ciertos aspectos aparecen por primera vez en alguno de ellos, pero luego son incorporados a lenguajes posteriores. • Es preferible hablar de aspectos de interés, y de su evolución, e indicar para cada lenguaje cuáles de dichos aspectos incorpora. • El aspecto más relevante es el modelo de cómputo: • paradigma imperativo • paradigma lógico • paradigma funcional • Otros aspectos relevantes: • encapsulamiento y modularidad • concurrencia y paralelismo • sistemas de tipos • resolución de restricciones • metaprogramación • generación dinámica de HTML R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 9 / 42
  • 10. Modelos de cómputo Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 10 / 42
  • 11. Modelos de cómputo El paradigma imperativo • Sus lenguajes representan una abstracción de la máquina hardware sudyacente. • El cómputo se concibe como una transformación incremental del estado. • La instrucción estrella es la de asignación, de la forma x := exp, donde x es una variable, posiblemente subindicada. • Esta instrucción se corresponde con el trasiego de datos entre la memoria y la unidad de proceso. • El resto de las instrucciones se dedican a indicar el orden preciso en que se realizan estas asignaciones y a variar los subíndices. • De esta forma, el cómputo avanza modicando incrementalmente el estado hasta alcanzar el estado nal deseado. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 11 / 42
  • 12. Modelos de cómputo El paradigma lógico (1) 1) descendiente(X,Y) :- hijo(X,Y). 2) descendiente(X,Y) :- hijo(Z,Y), descendiente(X,Z). 3) hermano(X,Y) :- hijo(X,Z), hijo(Y,Z), X /= Y. 4) sobrino(X,Y) :- hermano(Y,Z), descendiente(X,Z). 5) hijo(miguel,pedro). 6) hijo(sonia,pedro). 7) hijo(sonia,juana). 8) hijo(laura,juana). 9) hijo(luis, sonia). 10) hijo(antonio,sonia). 11) hijo(olga,luis). 12) hijo(diana,antonio). R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 12 / 42
  • 13. Modelos de cómputo El paradigma lógico (2) • El programa no especica el orden de ejecución, sino que dene un conjunto de propiedades y hechos. • La repetición de cómputos está implícita en la recursión. • Los condicionales están implíctos en la elección de cláusula mediante un ajuste de patrones especial llamado unicación. • Varias respuestas ante una misma pregunta (no determinismo): hermano(sonia,X)? X = miguel; X = laura • Ejecución reversible: descendiente(X,pedro)? versus descendiente(diana,Y)? • La corrección de cada cláusula se puede inspeccionar independientemente • El cómputo avanza mediante pasos de resolución, que pueden entenderse como una forma de deducción. • Reducción de un orden de magnitud en el número de líneas de código fuente frente al paradigma imperativo. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 13 / 42
  • 14. Modelos de cómputo El paradigma funcional (1) data Ord a = Arbus a = Vacio | Unir (Arbus a) a (Arbus a) insertar :: Ord a = a - Arbus a - Arbus a insertar x Vacio = Unir Vacio x Vacio insertar x (Unir i y d) | x y = Unir i y (insertar x d) | x == y = Unir i y d | x y = Unir (insertar x i) y d crear :: Ord A = [a] - Arbus a crear = foldr insertar Vacio inorden :: Ord a = Arbus a - [a] inorden Vacio = [] inorden (Unir i x d) = inorden i ++ [x] ++ inorden d R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 14 / 42
  • 15. Modelos de cómputo El paradigma funcional (2) • Ausencia de estado mutable: Ejecutar ≡ Simplicar una expresión • El paso elemental de ejecución es la β-reducción, consistente en reemplazar una parte izquierda por la correspondiente parte derecha de una denición. • No hay control de secuencia, salvo la implícita en las dependencias de datos. • El recorrido recursivo de las estructuras de datos se encapsula en funciones polimórcas de orden superior. • Con ello se dispone de un amplio catálogo de bloques genéricos reutilizables: foldr :: (a - b - b) - b - [a] - b foldr f z [] = z foldr f z (x:xs) = f x (foldr f z xs) • Introdujeron el sistema polimórco de tipos y la inferencia automática. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 15 / 42
  • 16. Modelos de cómputo El paradigma funcional (3) • En realidad, el paradigma funcional aporta dos modelos de cómputo: • La evaluación impaciente: corresponde al paso de parámetros por valor. • La evaluación perezosa: termina más a menudo que la impaciente, no realiza cálculos innecesarios, y admite objetos innitos: nats = 0 : map (+1) nats • Otra aportación es el orden superior: las funciones son tratadas como valores a todos los efectos. Pueden ser parámetros o/y resultados de otras funciones, almacenadas en estructuras de datos, y denidas dinámicamente. • Su uso disminuye el esfuerzo de programación y la introducción de errores. • Programar se parece más a componer piezas que a crear código nuevo. • El paradigma imperativo soporta una versión más limitada del orden superior y la presencia de posibles efectos laterales limita aún más dicho uso. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 16 / 42
  • 17. Encapsulamiento y modularidad Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 17 / 42
  • 18. Encapsulamiento y modularidad Abstracciones y facilidades de ocultamiento • Los primeros LP incluían tan solo procedimientos y funciones con parámetros como único mecanismo de abstracción. • Ello permitió un cierto grado de encapsulamiento ya que es posible utilizar una función sin conocer cómo está implementada. • Pero es insuciente para basar en ella la descomposición modular de un programa grande. • La abstracción llegó algo mas tarde a las representaciones de datos con la aparición del concepto de tipo abstracto de datos. • Dicho concepto, junto con la creación dinámica de objetos, conteniendo cada uno un valor del tipo abstracto, dio lugar a la idea de clase de la programación orientada objetos. • Basados en estas ideas, la mayoría de los lenguajes incluyen actualmente alguna noción de módulo que permita exportar al entorno circundante cierta información, y a la vez que se oculta otra. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 18 / 42
  • 19. Encapsulamiento y modularidad Los tipos abstractos de datos • Concepto acuñado hacia 1972. Aportaciones: 1 Una noción de ocultamiento de la representación de un tipo 2 Una interfaz visible: conjunto de operaciones que operan con valores del tipo 3 Una técnica de especicación formal del comportamiento observable 4 Un concepto de genericidad: tipos pasados como parámetros a un tipo. • Da lugar a un nuevo concepto de módulo y a nuevos ámbitos de visibilidad de los identicadores. • Produce herramientas de prototipado y de demostración de propiedades basadas en técnicas de reescritura. • Lenguajes pioneros: CLU (B. Liskov, 1974), Modula (N. Wirth, 1975), Ada (DoD, 1975-1980). • También son uno de los orígenes de los lenguajes orientados a objetos: Smalltalk (A. Kay, 1980), C++ (B. Stroustrup, 1983), Java (J. Gosling, 1995) R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 19 / 42
  • 20. Encapsulamiento y modularidad La programación orientada a objetos (1) • El segundo origen de la POO es la noción de herencia introducida por primera vez en un derivado de Algol-60, Simula 67 (Nygaard y Dahl, 1967) • El paradigma, tal como hoy lo conocemos, se debe a la visión de Alan Kay (Todo son objetos) y a su lenguaje Smalltalk: 1 Lenguaje compilado a una máquina virtual 2 Creación dinámica de objetos, recolector de basura 3 Conceptos de clase, subclase, vinculación dinámica, clase abstracta,. . . 4 Entorno gráco interactivo, el primero basado en ventanas e iconos 5 Amplia librería de clases con estructura jerárquica • La herencia es un potente factor de reutilización: la subclase solo necesita denir los campos y métodos adicionales a los de la superclase . • C++ añade la eciencia necesaria para que el paradigma se difunda en la industria. • Java añade la independencia de la máquina, el código móvil y el maridaje con los navegadores de Internet. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 20 / 42
  • 21. Encapsulamiento y modularidad La programación orientada a objetos (2) // Clase para manipular fechas public class Fecha { // Construye una fecha por defecto public Fecha ( ) { dia = 1; mes = 1; año = 2000 } // Construye una fecha concreta public Fecha (int d, int m, int a) { dia = d; mes = m; año = a } public boolean MayorQue (Fecha f2) { return año f2.año || año == f2.año (mes f2.mes || mes == f2.mes dia f2.dia); } // Atributos privados de la clase private int dia; private int mes; private int año; } Una clase escrita en Java R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 21 / 42
  • 22. Concurrencia y paralelismo Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 22 / 42
  • 23. Concurrencia y paralelismo Concurrencia (1) • La disparidad entre la velocidad de la unidad de proceso y la de los periféricos condujo en los años 1960 a la invención de la interrupción, y con ella al paradigma de programación concurrente. • La multiprogramación (i.e. los procesos concurrentes en una sola máquina) trajo consigo nuevos tipos de errores: • corrupción de los datos accedidos concurrentemente • errores dependientes del tiempo • interbloqueos • inanición • Se tardaron muchos años en comprender el fenómeno. Fueron determinantes los trabajos de E.W. Dijkstra, y C.A.R. Hoare (1965-1975). • Los primeros mecanismos, semáforos, regiones críticas, monitores, presuponen la existencia de una memoria común. • Los siguientes, mensajes asíncronos, mensajes síncronos, llamada remota o rendezvous, pueden aplicarse tanto a memoria compartida como distribuida. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 23 / 42
  • 24. Concurrencia y paralelismo Concurrencia (2) • La concurrencia se considera hoy el modo natural de organizar las tareas de los sistemas operativos, y de los sistemas que controlan procesos de la realidad (centrales telefónicas, servidores web, plantas industriales, etc.). • El primer lenguaje de amplio uso en incorporar mecanismos concurrentes fue Ada (1980). • Actualmente todos los LP imperativos incorporan alguna noción de hebra concurrente y mecanismos para sincronizarlas. • Los lenguajes funcionales y lógicos también tienen versiones concurrentes: Concurrent Haskell, Concurrent ML, Prolog Concurrente, P-Prolog. • Algunos de ellos, como Erlang, han nacido directamente con la pretensión de programar sistemas distribuidos con miles de procesos y docenas de máquinas para albergarlos. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 24 / 42
  • 25. Concurrencia y paralelismo Paralelismo (1) • La programación paralela tiene como objetivo explotar al máximo la capacidad de cálculo de un conjunto de procesadores. • Se utiliza para rebajar el tiempo de algoritmos intensivos en cómputo: predicción meteorológica, plegado de proteinas, factorización de números ... • Los objetivos principales son repartir la carga del modo más uniforme posible, y disminuir el proceso dedicado a comunicaciones. • Hay dos modelos básicos de cómputo, el paralelismo de tareas y el paralelismo de datos. • En el primero, el programador crea una estructura de procesos (p.e. esquemas divide y vencerás, en tubería, de trabajadores replicados, etc.) y no todas las tareas realizan el mismo trabajo. • En el segundo, el programador es responsable de distribuir los datos entre los procesadores, pero existe un solo código secuencial que es ejecutado síncronamente por todos ellos. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 25 / 42
  • 26. Concurrencia y paralelismo Paralelismo (2) • En el modelo de paralelismo de datos el LP estándar es High Performance Fortran (1993), una variante de Fortran 90 con directivas para la distribución. • En el paradigma funcional, Data Parallel Haskell (2007), también implementa dicho modelo. • En el modelo de paralelismo de tareas hay dos estándares de librerías de paso de mensajes: PVM (Parallel Virtual Machine, 1990) y MPI (Message Passing Interface, 1993) . • El paralelismo, además de un paradigma con lenguajes propios, también es un mecanismo de implementación de los lenguajes, especialmente en el ámbito declarativo (Eden, Glasgow Parallel Haskell, Parallel Prolog). • En estos lenguajes, el programador no necesita especicar el orden de las acciones. El compilador y el sistema de soporte organizan la ejecución en paralelo de partes del programa que no intereran entre sí. Las oportunidades son muchas debido a la ausencia de efectos laterales. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 26 / 42
  • 27. Sistemas de tipos Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 27 / 42
  • 28. Sistemas de tipos Evolución de los sistemas de tipos • Los tipos de los primeros lenguajes se correspondían casi exactamente con los soportados por el hardware. • Más adelante, se formaron dos corrientes: los que defendían una disciplina de tipos, en la que toda variable se declara con un tipo y el compilador fuerza un uso compatible con el mismo, y los que defendían un lenguaje sin tipos en tiempo de compilación. • A la primera pertenecen por ejemplo Algol-60, Pascal, Ada y Java. • A la segunda, Lisp, Prolog y Erlang. • Los defensores de la primera alegan seguridad, los de la segunda exibilidad. • Los lenguajes funcionales (SML, 1980) encontraron el sistema de tipos con polimorsmo paramétrico, que parece reunir lo mejor de ambos mundos. • Por un lado, no es necesario declarar el tipo de las variables. Por otro, una variable o una función pueden tener muchos tipos, lo que va a favor de la exibilidad. map :: (a - b) - [a] - [b] map f [] = [] map f (x:xs) = f x : map f xs R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 28 / 42
  • 29. Sistemas de tipos El polimorsmo de subtipos • Los lenguajes orientados a objetos soportan el llamado polimorsmo de subtipos, según el cual un objeto de una subclase es admisible en cualquier parte del texto donde sea admisible uno de la superclase. • También suministran un tipo universal Object del cual toda clase es subtipo. • Con ello es posible tener las ventajas del polimorsmo paramétrico, y otras adicionales como crear una lista con objetos de tipos distintos. En ese caso, a costa de la seguridad, o de introducir comprobaciones dinámicas. • También soportan una forma de tipado en tiempo de ejecución, la vinculación dinámica, que escoge el método aplicable a un objeto según el tipo de este. • Ello obliga a tener una representación en ejecución del tipo de un objeto. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 29 / 42
  • 30. Sistemas de tipos La sobrecarga • Se llama sobrecarga al hecho de poder emplear el mismo nombre para operaciones distintas de un LP. Algunas operaciones tales como +, −, ∗, ≤, están sobrecargadas en la mayoría de los lenguajes. • A partir de Ada, la sobrecarga se permite también para las operaciones denidas por el usuario. • Los lenguajes orientados a objetos, como C++ y Java, también la permiten. Un uso frecuente es denir distintos constructores de un objeto, todos ellos con el mismo nombre. • El compilador determina la función apropiada en base al número y tipo de los argumentos. • Haskell introduce las llamadas clases de tipos para denir operaciones sobrecargadas: quicksort :: Ord a = [a] - [a] • Las clases abstractas y las interfaces de Java, proporcionan facilidades muy similares. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 30 / 42
  • 31. Sistemas de tipos La genericidad • Es una consecuencia directa de la teoría de tipos abstractos de datos (TAD) desarrollada durante los años 1970-80. • Un TAD puede estar parametrizado por otros TADs anónimos de los que solo se conocen algunas de sus operaciones. Ejemplo: árbol binario de búsqueda de elementos provistos de una relación de orden. • El primer LP que soportó la genericidad fue Ada: permite la declaración de un package, procedure o function genéricos. • Pueden recibir como parámetros tipos, operaciones y constantes. Para tener construcciones ejecutables, ha de concretarse la construcción genérica con parámetros reales que reemplacen a los formales. • La versión de C++ de 1990 incluyó las templates, clases que pueden recibir como parámetros tipos, otras clases, o constantes. • Las versiones más modernas de Java también incluyen esta facilidad. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 31 / 42
  • 32. Sistemas de tipos Otra forma de genericidad: el politipismo • Permite denir operaciones aplicables a todos los tipos de datos, actuales o futuros. La denición se hace por inducción sobre la estructura del tipo. • De momento, solo lo soportan los lenguajes funcionales: class Sized a where size :: a - Int size a = gsize (from a) class GSized f where gsize :: f a - Int instance GSized U1 where gsize U1 = 0 instance (GSized a, GSized b) = GSized (a :*: b) where gsize (x :*: y) = gsize x + gsize y instance (GSized a, GSized b) = GSized (a :+: b) where gsize (L1 x) = gsize x gsize (R1 x) = gsize x instance (GSized f) = GSized (M1 i c f) where gsize (M1 x) = gsize x instance Sized a = GSized (K1 i a) where gsize (K1 x) = size x instance Sized Int where size x = 1 instance Sized Char where size x = 1 R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 32 / 42
  • 33. Sistemas de tipos Resumen de las aportaciones de los tipos • Los tipos estáticos comenzaron siendo un factor de seguridad: el tipo se analiza durante la compilación y ello asegura que en ejecución se preservará. • Forzar tipos correctos en tiempo de compilación: 1 Detecta errores o despistes con una ínma inversión de esfuerzo 2 Asegura que no se producirán errores de tipos en ninguna ejecución • Compárese con analizar los tipos en ejecución y con programar sin tipos. • Las diversas formas de polimorsmo, la sobrecarga, la genericidad y el politipismo los convierte además en un potente factor de reutilización: • Cuanto más general sea el tipo de un componente, en más contextos puede ser aceptado como válido, y por tanto puede ser más reutilizado • Programar sin tipos debería reservarse solo para resolver situaciones excepcionales y solo para programadores expertos. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 33 / 42
  • 34. Otros aspectos relevantes Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 34 / 42
  • 35. Otros aspectos relevantes La programación con restricciones • Existen lenguajes especializados para expresar y resolver problemas con restricciones desde los años 1970. Son lenguajes de propósito especíco. • Un problema de este tipo consta de los siguientes elementos: • CSP ≡ (V, D, C) COP ≡ (V, D, C, F). • Variables: V ≡ {v1, v2, . . . , vn } • Dominios: D ≡ {d1, d2, . . . , dn } • Restricciones: C ≡ {c1, c2, . . . , cm } • Candidatos: combinaciones que asignan a cada vi un valor de di . • Resolver: consiste en encontrar candidatos que satisfagan C. • Optimizar: consiste además en minimizar/maximizar una función objetivo F. • Desde cualquier LP se puede utilizar una librería CSP/COP, pero el paradigma lógico ha integrado la resolución de restricciones de forma bastante natural. • A partir de 1987 aparecen los lenguajes lógicos con restricciones (Constraint Logic Programming, o CLP). Todas las versiones actuales de Prolog incluyen el uso de las mismas. • Tipos de restricciones: dominios nitos, igualdad, ≤, lineales sobre reales, racionales o enteros, cuadráticas, ... R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 35 / 42
  • 36. Otros aspectos relevantes La metaprogramación • También llamada reexividad (reection), es la posibilidad de condicionar la compilación desde el propio del programa en compilación. • Los primeros antecedentes son el sistema de macros de LISP, y los preprocesadores de C para realizar por ejemplo compilación condicional. • Actualmente, todos los LP incluyen directivas de compilación o preprocesadores para especializar la compilación. Con ellos es posible incluso denir lenguajes empotrados dentro del lenguaje huesped. • El lenguaje de plantillas de C++ es tan potente que permite denir cualquier función computable (p.e. el factorial) para ser ejecutada durante la compilación. • En MetaML es posible escribir metacódigo que generará código en tiempo de ejecución. Dicho código estará, no obstante, bien tipado. • Template Haskell permite inspeccionar los tipos de los módulos ya compilados, y generar código especializado para dichos tipos: data T a = Tip a | Fork (T a) (T a) reify :: Name - Q Info info = reify T ... R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 36 / 42
  • 37. Otros aspectos relevantes Los lenguajes de script • La aparición de Internet y la necesidad de un creciente trasiego de páginas HTML y XML entre servidores y clientes, desató toda una pléyade de nuevas tecnologías y lenguajes. • Casi desde el principio hubo un deseo de dotar a dichas páginas de animación e interactividad. • Muy pronto surgieron los llamados lenguajes de script, lenguajes todo-terreno cuyo objetivo inicial era crear dinámicamente páginas HTML. • Se les dotó de acceso a los mandatos del sistema operativo y a las bases de datos subyacentes con el n de manipular cheros, ejecutar programas, y obtener o modicar información. • Aunque podríamos considerar de propósito especico estos lenguajes, de hecho engloban en su seno lenguajes de programación completos y se escriben en ellos aplicaciones de creciente complejidad. • Ejemplos: JavaScript, JSP, PHP, Ruby, Python (via API), ... R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 37 / 42
  • 38. El presente y el futuro Índice 1 Introducción 2 Modelos de cómputo 3 Encapsulamiento y modularidad 4 Concurrencia y paralelismo 5 Sistemas de tipos 6 Otros aspectos relevantes 7 El presente y el futuro R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 38 / 42
  • 39. El presente y el futuro El presente: la confusión de las lenguas • El momento actual se caracteriza por la combinación de varios paradigmas en un mismo lenguaje: • Programación lógico-funcional (Curry, TOY) • Programación funcional-concurrente (Erlang, Concurrent Haskell) • Programación funcional-paralela (GPH, Eden, Data Parallel Haskell) • Programación lógico-funcional-concurrente-orientada a objetos (Oz) • A la vez, los lenguajes imperativos orientados objetos incorporan un creciente número de construcciones funcionales: • JavaSript: maps, folds, closures • Java 8: maps, folds, lambda abstractions • Ruby: lambda abstractions, closures, rst-class continuations • Python: map, reduce, lter, list comprehensions, lambda abstractions • Y algunos lenguajes funcionales incorporan facilidades para la orientación a objetos: Scala, F # • ¾Estamos combinando lo mejor de ambos mundos? R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 39 / 42
  • 40. El presente y el futuro El presente: la confusión de las lenguas • El momento actual se caracteriza por la combinación de varios paradigmas en un mismo lenguaje: • Programación lógico-funcional (Curry, TOY) • Programación funcional-concurrente (Erlang, Concurrent Haskell) • Programación funcional-paralela (GPH, Eden, Data Parallel Haskell) • Programación lógico-funcional-concurrente-orientada a objetos (Oz) • A la vez, los lenguajes imperativos orientados objetos incorporan un creciente número de construcciones funcionales: • JavaSript: maps, folds, closures • Java 8: maps, folds, lambda abstractions • Ruby: lambda abstractions, closures, rst-class continuations • Python: map, reduce, lter, list comprehensions, lambda abstractions • Y algunos lenguajes funcionales incorporan facilidades para la orientación a objetos: Scala, F # • ¾Estamos combinando lo peor de ambos mundos? R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 39 / 42
  • 41. El presente y el futuro El presente: el abandono del tipado estático • La mayor parte de los lenguajes de script son interpretados y tienen tipado dinámico: Ruby, PHP, Python, JavaScript, ... • Ello presenta dos inconvenientes: • Necesitan mas memoria y más tiempo, para poder comprobar los tipos en ejecución. • Solo se detectan los errores de tipos en los caminos realmente ejecutados. • Además, la mayoría de ellos convierten automáticamente unos tipos en otros con excesiva exibilidad (p.e. en Phyton las variables adquieren tipo al ser asignadas, en JavaScript, 5 * 5 devuelve 25, pero a * 5 es un error). • Lo cual, unido a la mezcla de paradigmas, y a las amplias facilidades de metaprogramación que soportan, hace que estos lenguajes sean muy peligrosos de usar por programadores no expertos. • ¾Vamos hacia una nueva crisis del software? R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 40 / 42
  • 42. El presente y el futuro El futuro (1) • Resumiendo, la evolución de los LP ha ido en las siguientes direcciones: 1 Un creciente nivel de abstracción: tipos denidos por el usuario, tipos abstractos, clases, funciones de orden superior, construcciones para la concurrencia, etc. 2 Mecanismos de modularidad, que permiten independizar unas partes del programa de otras. 3 Mecanismos de seguridad estática: los sistemas de tipos protegen de errores triviales que de otro modo pasarían inadvertidos. A la vez tienen la suciente exibilidad para no constreñir excesivamente al programador. 4 Potenciamiento de la reutilización: los tipos polimórcos, la sobrecarga, la genericidad, la modularidad y el orden superior, potencian la creación de componentes reutilizables, bien tal cual son, bien previa adaptación. • En mi opinión, estas tendencias se van a mantener en el futuro porque han demostrado ser capaces de mantener bajo control los siempre crecientes complejidad y volumen de los sistemas software. • Pero no se debe bajar la guardia y volver a escribir los programas de modo artesanal, como está ocurriendo con las tecnologías asociadas a Internet. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 41 / 42
  • 43. El presente y el futuro El futuro (2) Unas notas nales sobre el papel que estimo jugarán los futuros compiladores: • Hasta ahora estos se han ocupado fundamentalmente de garantizar la corrección sintáctica y de tipos de los programas, además de haber puesto un énfasis comprensible en generar un código lo más eciente posible. • Pero les aguardan tareas de mayor responsabilidad, en base a los avances de los últimos años en las técnicas de análisis estático: • demostrar la terminación de bucles • sintetizar invariantes para los mismos • estimar cotas superiores al coste en tiempo y en memoria de los programas • demostrar la ausencia de bloqueo de los programas concurrentes R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 42 / 42
  • 44. El presente y el futuro El futuro (2) Unas notas nales sobre el papel que estimo jugarán los futuros compiladores: • Hasta ahora estos se han ocupado fundamentalmente de garantizar la corrección sintáctica y de tipos de los programas, además de haber puesto un énfasis comprensible en generar un código lo más eciente posible. • Pero les aguardan tareas de mayor responsabilidad, en base a los avances de los últimos años en las técnicas de análisis estático: • demostrar la terminación de bucles • sintetizar invariantes para los mismos • estimar cotas superiores al coste en tiempo y en memoria de los programas • demostrar la ausencia de bloqueo de los programas concurrentes CODA • Los programas son entidades tremendamente complejas, pero a diferencia de otros productos de la ingeniería, son absolutamente predecibles y no sufren desgaste por el uso. • Nuestra obligación es dominarlos e impedir que ellos nos dominen. R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 42 / 42
  • 45. El presente y el futuro El futuro (2) Unas notas nales sobre el papel que estimo jugarán los futuros compiladores: • Hasta ahora estos se han ocupado fundamentalmente de garantizar la corrección sintáctica y de tipos de los programas, además de haber puesto un énfasis comprensible en generar un código lo más eciente posible. • Pero les aguardan tareas de mayor responsabilidad, en base a los avances de los últimos años en las técnicas de análisis estático: • demostrar la terminación de bucles • sintetizar invariantes para los mismos • estimar cotas superiores al coste en tiempo y en memoria de los programas • demostrar la ausencia de bloqueo de los programas concurrentes CODA • Los programas son entidades tremendamente complejas, pero a diferencia de otros productos de la ingeniería, son absolutamente predecibles y no sufren desgaste por el uso. • Nuestra obligación es dominarlos e impedir que ellos nos dominen. ½MUCHAS GRACIAS! R. Peña (SIC-UCM) Los lenguajes de programación Madrid, junio 2017 42 / 42