Está é a página da disciplina Linguagens de Programação, do professor Fabio Mascarenhas, para o semestre de 2017.1. As aulas da disciplina são às segundas e quartas, das 08 às 10 horas, na sala 25 do bloco F2 do CCMN.
O objetivo dessa disciplina é expor os alunos aos diferentes paradigmas de programação, mostrando a eles o que está “atrás da cortina” desses paradigmas. Os alunos aprenderão como a maneira de funcionamento das linguagens com as quais eles já estão familizarizados é apenas uma possibilidade em um grande espaço de linguagens possíveis. Para isso faremos tanto o estudo de “linguagens símbolo” dos diferentes paradigmas, quanto a construção e estudo de pequenos interpretadores para linguagens que são exemplos estilizados dos mesmos paradigmas.
Os alunos precisam ter uma boa desenvoltura com programação, em especial com estruturas de dados e funções recursivas. Não é necessário conhecimento da teoria de linguagens formais, ou de técnicas de compilação; o enfoque desse curso é o comportamento das linguagens e não análise sintática ou geração de código.
Introdução à programação funcional pura; funções como valores, tipos algébricos, pattern matching; padrões de programação funcional: listas, mapas e folds; o interpretador de fun, uma mini-linguagem funcional; regras de escopo de seu efeito em funções de primeira classe; acrescentando tipos a fun; o familiar revisitado: microC, uma linguagem imperativa com ponteiros e funções de primeira ordem; lvalues vs. rvalues; a essência da programação em objetos.
A avaliação será feita por uma sequência de listas de exercício e pequenos trabalhos, que deverão ser feitos individualmente. A média final para ser aprovado é 5,0.
Temos um grupo no Facebook para perguntas e avisos sobre a matéria. Acessem aqui.
Uma boa referência para os assuntos das nossas primeiras aulas, sobre programação funcional, é o capítulo 1 do Structure of Interpretation of Computer Programs, de Abelson e Sussman.
Não existe um livro texto único para essa disciplina. O que mais se aproxima disso é a segunda parte (do capítulo 23 em diante) do livro Programming and Programming Languages, de Shriram Krishnamurthi, por adotar a estratégia de explicar conceitos de linguagens de programação através do estudo de pequenos interpretadores. Outro livro que adota a mesma estratégia é o Essentials of Programming Languages, de Friedman e Wand.
Provavelmente o melhor livro para uma visão de alto nível dos conceitos de linguagens de programação é o Programming Language Pragmatics, de Michael Scott. É uma boa referência para resumos de vários temas que serão cobertos em sala.
Tanto as notas de aula quanto o código fonte estão em branches de um repositório no Github. Você pode baixar um arquivo zip com o conteúdo do branch, e então importá-lo no IntelliJ IDEA Community Edition, ou clonar o branch diretamente no IDEA seguindo essas instruções.
Quando possível, também vou por um link para o código da aula no Scastie, para poder ser executado e modificado sem precisar da IDE Scala.
O objetivo dos links abaixo é a exploração de diferentes semânticas de linguagens de programação. Cada um deles tem a definição da sintaxe de uma linguagem misteriosa, uma caixa de texto para entrar programas e executar programas com essa sintaxe, e diferentes interpretadores, cada um dando uma semântica para o que está sendo enfatizado.
O objetivo é explorar as diferentes semânticas, tentando criar programas que tenham resultados diferentes em pelo menos um dos interpretadores.
As listas de exercício são sempre individuais, a não ser que seja dito o contrário para alguma lista.
Podem entrar em contato pelo meu email que responderei assim que possível. Também tenho um horário de atendimento de alunos na minha sala, segundas e quartas de 13 às 14 horas. A sala é a E-2013 do DCC.
Última Atualização: 2017-11-28 17:18