This is an old revision of the document!


CC5104/CC71Y - Lenguajes de Programación II

Objetivo general

El curso entrega los elementos técnicos y formales necesarios para entender la problematica de garantizar que los programas cumplen con sus objetivos, limitando efectos indeseados, lo más temprano posible. Se estudian las nociones de programas válidos, errores y excepciones, contratos, y sobre todo, tipos. En particular, se describen los conceptos fundamentales de los sistemas de tipos, permitiendo entender porque los lenguajes de hoy siguen evolucionando en ese aspecto (por ejemplo, el sistema de tipos de Java), y porque no existe una respuesta única y definitiva al problema. El alumno será capaz además de relacionar un sistema de tipo con la semántica del lenguaje, probando su coherencia. Además de proveer un entendimiento más profundo de los lenguajes de programación, el curso habilita a los alumnos para diseñar (extensiones de) lenguajes que proveen garantías fuertes de buen comportamiento.

Nota La nueva edición del curso tendrá dos enfoques adicionales:

  • tipos graduales: combinar tipos estáticos y dinámicos. Tipos graduales fueron adoptados bajo alguna variante en los recientes lenguajes Dart (Google), TypeScript (Microsoft), Hack (Facebook), etc.)
  • introducción a la programación certificada en Coq: definir programas junto con una demostración de su correctitud.

Este curso es parte de los grupos de cursos recomendados para las lineas de especialización en Ciencia de la Computación y en Ingeniería de Software.

Contenidos

  • semántica de lenguajes, lambda calculus
  • sistemas de tipos estáticos y dinámicos
  • lenguajes seguro y sistemas de tipos coherentes
  • el Halting Problem, tipos y contratos
  • simply-typed lambda calculus
  • simples extensiones (formas derivadas, pares, tuplas, records, sumas, variantes, etc.)
  • extensiones avanzadas: recursión, referencias, excepciones
  • conexión con lógica constructiva (o “propositions as types”)
  • polimorfismo de subtipos, coerciones
  • tipear objetos (object calculus, Featherweight Java)
  • polimorfismo paramétrico (“generics”)
  • inferencia de tipos
  • el debate “dynamic vs. static typing”
  • perspectivas en verificación de software: sistemas de tipos y efectos, analisis de programa, model checking, theorem proving, etc.

Además de la base teorica, el curso insistirá sobre la construcción de artefactos (en particular type checkers).

Material de referencia

  • (principalmente) Types and Programming Languages (TAPL), Benjamin Pierce
  • Programming Languages: Application and Interpretation (PLAI), Shriram Krishnamurthi
  • Practical Foundations for Programming Languages (PFPL), Robert Harper
  • Type Systems (TS), Luca Cardelli

Horario

Para el 2011/2, el horario es: 1.5/2.5

Evaluación

Mini-controles y tareas. No hay examen.