Tipos y Lenguajes de Programación v1

34
Tipos y Lenguajes de programación

description

Lenguajes

Transcript of Tipos y Lenguajes de Programación v1

Tipos y Lenguajes de programacin

Tipos y Lenguajes de programacin

Benjamin C. Pierce

La Prensa de MITCambridge, MassachusettsLondres, Inglaterra

2002 Benjamin C. Pierce

Reservados todos los derechos. Ninguna parte de este libro puede ser reproducida en cualquier forma por ninguno electrnico de medios mecnicos (incluso fotocopia, grabacin, o almacenaje de informacin y recuperacin) sin el permiso por escrito del editor.

Este libro fue puesto en el Lucida Brillante por el autor que usa el sistema de preparacin de documentos de LTEX.

Imprimido y ligado en los Estados Unidos de Amrica.

Biblioteca de Datos de catalogacin en la Publicacin de Congreso

Perfore, Benjamin C.Tipos y lenguajes de programacin / Benjamin C. Pierce p. cm.Incluye referencias bibliogrficas e ndice.ISBN 0-262-16209-1 (hc.: papel de alk.)1. Lenguajes de programacin (Ordenadores electrnicos). Yo. Ttulo.

QA76.7.P54 2002005.13dc21

2001044428

Contenido

Prefacio xiii

1 Introduccin 11.1 Tipos en Ciencia de la Computacin11.2 Qu tipo de sistemas son buenos para 41.3 Tipos de sistemas y diseo de lenguajes 91.4 Desarrollo Histrico101.5 Lectura relacionada 12

2 Matemticas Preliminares152.1 Conjuntos, relaciones y funciones 152.2 Conjuntos ordenados162.3 Sucesiones182.4 Induccin 192.5 Lecturas anteriores 20

I Sistemas sin tipo21

3 Expresiones Aritmticas sin tipo233.1 Introduccin 233.2 Sintaxis 263.3 Induccin de Trminos 293.4 Estilos semnticos 323.5 Evaluacin343.6 Notas 43

vi Contents

4 Una implementacin ML de expresiones aritmticas454.1 Sintaxis 464.2 Evaluacin474.3 El Resto de la historia 49

5 El clculo Lambda sin tipo 515.1 Fundamentos525.2 La programacin en el clculo Lambda585.3 Formalidades 685.4 Notas 73

6 Representacin sin nombre de trminos 756.1 Trminos y Contextos 766.2 Desplazamiento y sustitucin786.3 Evaluacin80

7 Una Realizacin ML del clculo Lambda 837.1 Trminos y Contextos 837.2 Desplazamiento y sustitucin 857.3 Evaluacin877.4 Notas 88

II Tipos simples 89

8 Tipos expresiones aritmticas918.1 Tipos 918.2 La Relacin escrita928.3 Seguridad = Progreso + Preservacin95

9 Simplemente clculo Lambda 999.1 Tipos de funcin 999.2 La Relacin escrita1009.3 Propiedades de escritura1049.4 La correspondencia Curry-Howard1089.5 Erasure y Typability 1099.6 Curry-Style vs. Church-Style1119.7 Notas 111

10 Una implementacin ML de Tipos Simples 11310.1 Contextos 11310.2 Trminos y Tipos 11510.3 Verificacin de tipos115

Contents vii

11 Extensiones Simples11711.1 Tipos base 11711.2 El Tipo de Unidad 11811.3 Formas derivadas: Secuenciacin y comodines11911.4 Atribucin 12111.5 Permitir enlaces 12411.6 Pares 12611.7 Tuplas 12811.8 Archivos 12911.9 Sumas 13211.10 Variantes 13611.11 Recursin General 14211.12 Listas 146

12 Normalizacin14912.1 Normalizacin para Tipos Simples 14912.2 Notas 152

13 Referencias 15313.1 Introduccin 15313.2 Escritura15913.3 Evaluacin15913.4 Almacenamiento de tipos16213.5 Seguridad 16513.6 Notas 170

14 Excepciones17114.1 Aumento de Excepciones 17214.2 Manejo de Excepciones 17314.3 Excepciones que producen valores 175

III Subtipificacin179

15 Subtipificacin 18115.1 Bajo consumo 18115.2 La Relacin de Subtipo 18215.3 Propiedades de Subtipos y tipos 18815.4 Tipos superiores e inferiores19115.5 La subtitpificacin y otras caractersticas19315.6 Cohesin semntica para subtipificacin20015.7 Interseccin y tipos de Unin 20615.8 Notas 207

viii Contenido

16 Metateora de Subtipificacin 20916.1 Subtipificacin algortmica21016.2 Tipificacin algortmica21316.3 Unin y reunin21816.4 Tipificacin algortmica y el tipos inferiores220

17 Una Realizacin ML de Subtipificacin22117.1 Sintaxis 22117.2 Subtipificacin 22117.3 Tipificacin222

18 Caso de estudio: Objetos Imperativos22518.1 Qu es la Programacin orientada a objetos?22518.2 Objetos 22818.3 Generadores de objeto 22918.4 Subtipificacin 22918.5 Adicin de variables de Instancia 23018.6 Clases simples23118.7 Adicin de Variables de Instancia23318.8 Llamando Mtodos de Superclase 23418.9 Clases con sigo misma23418.10 Iniciar Recursin a travs de la misma 23518.11 Iniciar Recursin y orden de evaluacin 23718.12 Una implementacin ms eficiente 24118.13 Recapitulacin24418.14 Notas 245

19 Estudio del caso: Peso pluma Java 24719.1 Introduccin 24719.2 Descripcin 24919.3 Sistemas de tipos nominales y estructurales 25119.4 Definiciones 25419.5 Propiedades 26119.6 Codificacin contra Objetos Primitivos 26219.7 Notas 263

Contents ix

IV Tipos recurrentes 265

20 Tipos Recurrentes 267

20.1 Ejemplos 26820.2 Formalidades 27520.3 Subtipificacin 27920.4 Notas 279

21 Metateora de Tipos Recursivos 281

21.1 Induccin y Coinduccin28221.2 Tipos finitos e Infinitos 28421.3 Subtipificacin 28621.4 Una generalidad en transitividad 28821.5 Comprobacin de pertenencia 29021.6 Algoritmos ms eficientes 29521.7 rboles regulares 29821.8 Tipos-29921.9 Contando Subexpresiones30421.10 Generalidad: Un Algoritmo Exponencial 30921.11 Subtipificacin Iso-recursiva de tipos 31121.12 Notas 312

V Polimorfismo 315

22 Reconstruccin de Tipo 317

22.1 Tipos de variables y sustituciones 31722.2 Dos Visiones de tipos de variables 31922.3 Tipificacin basada en restricciones32122.4 Unificacin 32622.5 Tipos principales 32922.6 Anotaciones de Tipo implcitas 33022.7 Dejar el Polimorfismo 33122.8 Notas 336

23 Tipos Universales 339

23.1 Motivacin 33923.2 Variedades de Polimorfismo 34023.3 Sistema F34123.4 Ejemplos 34423.5 Propiedades bsicas35323.6 Borrado, tipificacin y reconstruccin de tipos354

x Contents

23.7 Borrado y orden de evaluacin 35723.8 Fragmentos de Sistema F35823.9 Parametricity35923.10 Impredicativity 36023.11 Notas 361

24 Tipos Existenciales 36324.1 Motivacin 36324.2 Abstraccin de datos existenciales36824.3 Codificaciones existenciales37724.4 Notas 379

25 Una Realizacin ML de Sistema F38125.1 Representacin annima de Tipos 38125.2 Tipo de cambio y sustitucin38225.3 Trminos 38325.4 Evaluacin38525.5 Tipificacin 386

26 Cuantificacin Bounded389

26.1Motivacin389

26.2Definiciones391

26.3Ejemplos396

26.4 Seguridad 40026.5 Tipos Existenciales Bounded 40626.6 Notas 408

27 Caso de estudio: Objetos Imperativos, Redux 411

28 Metateoria de cuantificacin Bounded 41728.1 Exposicin 41728.2 Tipificacin Minimal41828.3 Subtipificacin en Kernel F