Linguagens de Programação

Apresentação

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.

Ementa

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.

Avaliação

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.

Lista de Discussão

Temos um grupo no Facebook para perguntas e avisos sobre a matéria. Acessem aqui.

Livros

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.

Notas de Aula

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.

02/08 - Aula 1, no Scastie

07/08 - Aula 1, no Scastie

09/08 - Aula 3, no Scastie

14/08 - Aula 4, no Scastie

16/08 - Aula 5

21/08 - Aula 6

23/08 - Aula 7

28/08 - Aula 8

30/08 - Aula 9

04/09 - Aula 10

06/09 - Aula 11, gabarito Lista1

11/09 - Aula 12

13/09 - Aula 13

25/09 - gabarito Lista2

27/09 - Aula 14

02/10 - Aula 15

09/10 - Aula 16

11/10 - Aula 17

16/10 - Aula 18

30/10 - Aula 19

01/11 - Aula 20

06/11 - Aula 21

08/11 - Aula 22

13/11 - Aula 23

22/11 - Aula 24

27/11 - Aula 25

Linguagens Misteriosas

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.

16/08 - Números, diferentes semânticas para números e operações aritméticas

21/08 - Condicionais, diferentes semânticas para comparações e if

23/08 - Funções 1, diferentes semânticas para funções de primeira ordem

Listas de Exercício

As listas de exercício são sempre individuais, a não ser que seja dito o contrário para alguma lista.

21/08 - Primeira Lista, entrega até 03/09

11/09 - Segunda Lista, entrega até 24/09

09/10 - Terceira Lista, entrega até 30/10

28/11 - Quarta Lista, entrega até 12/12

Contato

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