Terceiro quadrimestre de 2014
Horário:
- turma A1: 3a (10:00-12:00), 3a (14:00-15:00)
- turma A2: 3a (10:00-12:00), 6a (8:00-10:00)
(Sim, a aula de terça de manhã é com as duas turmas juntas; as outras aulas são separadas)
Sala de aula:
Professor: Jerônimo C. Pellegrini
Sala do professor: S 805 (bloco B)
Email do professor: jeronimo.pellegrini ufabc edu br
Notas finais
Novidades
18/12 -- Notas finais disponíveis
17/12 -- Notas da fase 2 disponíveis
16/12 -- Versão final adiada para amanhã!
14/12 -- Não teremos aula 16/12
12/12 -- Critério de avaliação relaxado (tanto para os testes como para o trabalho) -- FELIZ NATAL!!!
[ inserir aqui risada característica de Papai Noel ]
11/12 -- Notas do T5 disponíveis [ REVISÃO NA SEXTA 12/12 ]
03/12 -- notas do T4 disponíveis [ REVISÃO NA SEXTA ]
27/11 -- Conceitos da fase 1 disponíveis
27/11 -- Vista/revisão na semana que vem
26/11 -- notas do T3 disponíveis
14/11 -- nova versão das notas de aula disponível (133)
14/11 -- Sobre trabalho.scm (leia abaixo)
13/11 -- Notas da fase 0 disponíveis
11/11 -- FASES I E II DO TRABALHO ADIADAS!!!
09/11 -- FASE I DO TRABALHO SERÁ ADIADA. Detalhes amanhã
07/11 -- Conceitos do T2 disponíveis
06/11 -- Sugestão de alternativa ao SLIME para Common Lisp
04/11 -- subsídios para uso de TCP e threads agora no site do trabalho
02/11 -- respondendo a dúvida posta em sala:
para abrir um arquivo fazendo append, não há forma
padronizada em Scheme. No Chicken, use o módulo "posix".
Por exemplo:
(define fd (file-open "zy" (+ open/wronly open/append open/creat)))
(define out (open-output-file* f #:append))
(display "hi" out)
(newline out)
(close-output-file out)
Veja documentação em http://wiki.call-cc.org/man/4/Unit%20posix
28/10 -- dias atrás incluí algumas dicas na descrição do trabalho. leiam!
27/10 -- instruções para entrega do trabalho
24/10 -- laboratório disponível todas as manhãs!
21/10 -- descrição do trabalho atualizada, conforme falamos em sala
21/10 -- datas de entrega do trabalho atualizadas
15/10 -- avaliação do T1 disponível
13/10 -- especificação do trabalho disponível
07/10 -- nova versão das notas de aula disponível (132)
06/10 -- informação sobre Scheme com Vi disponível
01/10 -- datas das avaliações disponíveis
30/09 -- início do curso
Sobre trabaho.scm
Testei em uma máquina fora do laboratório e funcionou. Isso inidica que é um bug naquela versão do Chicken! :-( Estou usando .9.1 (rev 1d21ec8)
Usem interpretado por enquanto...
Ementa
Visão comparativa entre os paradigmas de programação. Paradigma funcional. Paradigma concorrente.
Avaliação
O conceito final da disciplina poderá ser:
- F - Reprovado. O aluno deve cursar novamente a disciplina.
- C - Desempenho mínimo satisfatório, demonstrando capacidade de uso adequado dos conceitos da disciplina, habilidade para enfrentar problemas relativamente simples e prosseguir em estudos avançados.
- B - Bom desempenho, demonstrando boa capacidade de uso dos conceitos da disciplina.
- A - Desempenho excepcional, demonstrando excelente compreensão da disciplina e do uso da matéria.
A avaliação consistirá de
- Cinco minitestes, T1, T2, T3, T4, T5, cada um valendo 0, 0.5 ou 1.
- Um trabalho prático, P, que vale de 0 a 5. Os detalhes do trabalho serão divulgados em breve.
Descartaremos a pior das notas dos minitestes, e T = ∑Ti (a soma das quatro melhores notas de teste).
O conceito final será dado por
T < 2 → F. Caso contrário, [ sim, esta exigência foi retirada ]
- n ∈ [0, 4) → F
- n ∈ [4, 6) → C
- n ∈ [6, 8) → B
- n ∈ [8, 9] → A
Datas das avaliações:
14/10
04/11
18/11
02/12
09/12
Trabalho prático
A descrição está aqui!
Prazos:
- Fase 0: 30/10
- Fase I:
11/11 18/11
- Fase II:
25/11 02/12
- Versão final (com bônus): 17/12
Conceitos
Veja as notas do teste 1
Programa
Este programa está sujeito a mudanças simples. Grandes mudanças não devem acontecer.
- PROGRAMAÇÃO FUNCIONAL EM SCHEME
- Elementos básicos de Scheme
- Procedimentos
- Variáveis: ambientes, extensão e escopo
- Sistemas de tipos (estático/dinâmico; seguro/inseguro)
- Listas e vetores
- Fechos
- (POO com fechos)
- Metaprogramação
- Avaliação preguiçosa
- Streams (aplicação de av. preguiçosa)
- Continuações
- Aplicações de continuações: escape, multitarefa, backtracking, exceções
- Programação em Lógica
- Modelos de gerenciamento de memória; coleta de lixo
- PROGRAMAÇÃO CONCORRENTE
- Processos, threads e formas de concorrência
- Problemas inerentes à programação concorrente
- Memória compartilhada:
- Semáforos
- Monitores
- Memória transacional
- Thread pools
- Passagem de mensagens:
- Passagem de mensagens síncrona e assíncrona
Bibliografia e ferramentas
Links
Mais relevantes para este curso:
Outros links de interesse:
Para desenvolvimento em Scheme
- Interpretador ou compilador Scheme Recomendo fortemente o Chicken Scheme, que funciona em várias plataformas -- no entanto, recomendo fortemente também que usem Linux, porque não tenho como ajudá-los em outra plataforma. Veja como instalar.
- Ambiente de desenvolvimento. Há duas opções:
Bibliografia
Principal
- Notas de aula
- SICP
- Andrews, G. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison Wesley, 2000.
Secundária
- Brian Harvey, Matthew Wright: Simply Scheme: Introducing Computer Science, um dos muitos excelentes livros que introduzem Computação através de Scheme
- Max Hailperin, Barbara Kaiser, and Karl Knight: Concrete Abstractions: An Introduction to Computer Science Using Scheme, um dos muitos excelentes livros que introduzem Computação através de Scheme
- Peter Seibel: Practical Common Lisp, excelente introdução a Common Lisp.
- Paul Graham: On Lisp, com uma introdução rapidíssima (mais uma "revisão") a Common Lisp, seguido de vários métodos de programação usando macros.
- Bryan O'Sullivan, Don Stewart, e John Goerzen: Real World Haskell, introdução a Haskell com aplicações práticas
- Simon Marlow: Parallel and Concurrent Programming in Haskell, programação paralela e concorrente em Haskell
- Michael Snoyman: Developing Web Applications with Haskell and Yesod
- Eric Etheridge Haskell Tutorial for C Programmers, Haskell para quem sabe C.
- Miran Lipovaca: Learn You a Haskell for Great Good! - A Beginner's Guide, divertida introdução ao Haskell
- Jonathan Tang: Write Yourself a Scheme in 48 Hours -- muito bom! Escreva um interpretador Scheme usando Haskell, e aprenda as duas linguagens!
- Brian Harvey: Computer Science Logo Style, Introdução à Ciência da Computação com Logo
- Allen Downey: The Little Book of Semaphores -- em um formato muito interessante (primeiro cada problema é exposto, depois dicas e tentativas de solução, e finalmente uma solução de verdade), é um excelente livro! Inclui apêndices com código em C e Python. Na página do livro há um vídeo.
- Patrick Blackburn, Johan Bos, Kristina Striegnitz: Learn Prolog Now!, introdução ao Prolog
- Ulf Nilsson and Jan Maluszynski: Logic, Programming and Prolog, introdução ao Prolog
- James Lu, Jerud Mead: Prolog A Tutorial Introduction, introdução ao Prolog
- Clocksin Mellish, Programming in Prolog Uma das mais conhecidas introduções ao Prolog
- Sterling, Shapiro: The Art of Prolog Livro avançado sobre Prolog, excelente
- Covington, Nutte, Vellino: Prolog Programming in Depth. Excelente livro, com técnicas avançadas de Prolog.
- Richard O'Keefe, The Craft of Prolog Um brilhante livro avançado de Prolog
- Friedman, Wand and Haynes, Essentials of Programming Languages, 2nd or 3rd ed., MIT Press
- Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet, Damien Cassou, Marcus Denker: Squeak by Example sobre o Squeak Smalltalk
- Canol Gökel: Computer Programming using GNU Smalltalk, uma ótima introdução ao GNU Smalltalk