Título: Tópicos Especiais em Computação VIII – Sistemas de Tipos Código: INF???? Número de créditos: 04 Carga horária: 60 hs Horário: seg/qua 10:30 - 12:10 Súmula/ementa: Esta disciplina tem por objetivo proporcionar a base necessária para o estudo de características avançadas de linguagens de programação modernas tais como subtipos, polimorfismo paramétrico, coleções genéricas, herança simples, herança múltipla, etc. Várias dessas características estão presentes em linguagens como Java, C++, C#, Haskell e OCAML e fazem parte do componente de uma linguagem de programação conhecido como sistema de tipos. Além de prover uma melhor compreensão de mecanismos para programação genérica e reuso de código disponíveis em linguagens a disciplina cobre também aspectos de projeto de sistemas de tipos. O curso começará com sistemas de tipos simples, passando por subtipos, que constituem um componente fundamental de linguagens orientadas a objetos. Ao final serão vistos também sistemas de tipos não convencionais com aplicações em segurança, controle do uso de recursos e para linguagens de consulta e processamento de XML. Pré-requisitos: Para um melhor aproveitamento da disciplina é recomendável que o aluno possua ou conhecimentos básicos de semântica operacional e lógica proporcionado pelas disciplinas de Semântica Formal N, e Lógica para Computação, ou conceitos básicos de linguagens de programação oferecidos pelas disciplinas de Modelos de Linguagens de Programação e Compiladores. Responsável: Álvaro Freitas Moreira Objetivos: capacitar o aluno a compreender os princípios teóricos de sistemas de tipos e suas implicações práticas em linguagens; proporcionar conhecimentos básicos para que o aluno possa analisar o papel de um dado sistema de tipos em uma linguagem e também possa definir um novo sistema de tipos ou uma variação de um sistema de tipos já existente. Programa: Tipos, tipagem estática e dinâmica, segurança Núcleo de uma linguagem, extensões, formas derivadas Subtipos e orientação a objetos Tipos recursivos Tipos para programação genérica: polimorfismo, tipos universais e existenciais Algoritmos para inferência de tipos Tópicos avançados: exemplos de possíveis tópicos: Sistemas de tipos e segurança Tipos dependentes Sistemas de tipos para efeitos Sistemas de tipos para processamento de XML Método de trabalho: aulas expositivas em sala de aula, exercícios e pequenos exercícios de implementação para experimentar com características de linguagens de programação vistas na disciplina. Estudo de características avançadas de linguagens tais como Java, OCAML e Haskell, Será realizada uma prova na meio do semestre sobre os conteúdos básicos. A segunda metade do semestre será dedicada ao estudo de alguns sistemas de tipos não convencionais. Procedimentos e/ou critérios de avaliação: a avaliação será feita com base em : uma prova (na metade do semestre) sobre conteúdos básicos de sistemas de tipos, apresentação de trabalho realizado em grupo. O trabalho poderá ser sobre algum sistema de tipo não convencional e sobre alguma característica avançada de algum sistema de tipos de uma linguagem de programação, e participação em aula A nota final N será calculada da seguinte forma: N = Prova * 0.30 + Trabalho * 0,30 + Participação * 0,40 Alunos com N >= 6 estão aprovados. Alunos com N < 6 poderão recuperar somente a nota da prova. Referências [1] Types and Programming Languages, Benjamin Pierce, MIT Press, 2002. [2] Advanced Topics in Types and Programming Languages, Benjamin Pierce, editor MIT Press, 2005. [3] Concepts in Programming Languages. John Mitchell, Cambridge Univ Press, 2003