Terceiro quadrimestre de 2010
Horário: 2a (19:00-21:00) e 5a (21:00-23:00)
Sala de aula: 306 (2a) e L502 (5a)
Professor: Jerônimo C. Pellegrini
Sala do professor: S 805 (bloco B)
Email do professor: jeronimo.pellegrini ufabc edu br
A monitoria foi cancelada
21/12 -- Nova versão das notas de aula (v.109) 20/12 -- Nova versão das notas de aula (v.108) 19/12 -- Conceitos após o trabalho 2 15/12 -- Nova versão das notas de aula (v.107) 14/12 -- Conceitos após a prova 2 13/12 -- Nova versão das notas de aula (v.106) 12/12 -- Nova versão das notas de aula (v.105) 12/12 -- Nova versão das notas de aula (v.104) 11/12 -- Mais um exemplo de questão de prova (junto com as notas de aula) 04/12 -- Nova versão das notas de aula (v.103) 03/12 -- syn.scm e stm.scm disponíveis 02/12 -- Nova versão das notas de aula (v.102) 01/12 -- Vencedor do Google AI Challenge 2010: um programa Common Lisp! 30/11 -- Nova versão das notas de aula (v.101) 29/11 -- Nova versão das notas de aula (v.100) 29/11 -- Tres livros incluídos na bibliografia (havia esquecido: Andres, Lea e Bloch) 25/11 -- Nova versão das notas de aula (v.99) 25/11 -- Conceitos após o trabalho 1 24/11 -- Nova versão das notas de aula (v.98) 23/11 -- Código do pool de threads e servidor HTTP disponíveis 23/11 -- Nova versão das notas de aula (v.97) 21/11 -- Nova versão das notas de aula (v.96) 20/11 -- Nova versão das notas de aula (v.95) 18/11 -- Nova versão das notas de aula (v.94) 16/11 -- Nova versão das notas de aula (v.93) 15/11 -- Nova versão das notas de aula (v.92) 15/11 -- Nova versão das notas de aula (v.91) 14/11 -- Nova versão das notas de aula (v.90) 11/11 -- Entrega da T1 adiada para 18/nov 10/11 -- Aula de 11/11 cancelada 10/11 -- Monitoria cancelada 08/11 -- Nova versão das notas de aula (v.89) 07/11 -- Nova versão das notas de aula (v.88) 07/11 -- Nova versão das notas de aula (v.87) 06/11 -- Nova versão das notas de aula (v.86) 05/11 -- Conceitos após a P1 disponíveis 05/11 -- Nova versão das notas de aula (v.85) 28/10 -- Nova versão das notas de aula (v.84) 27/10 -- Nova versão das notas de aula (v.83) 26/10 -- Nova versão do tutorial de FFI do Chicken (v.0.0004) 23/10 -- Nova versão das notas de aula (v.82) 21/10 -- Nova versão das notas de aula (v.81) 20/10 -- Nova versão das notas de aula (v.80) 20/10 -- Nova versão das notas de aula (v.79) 20/10 -- metacircular.scm disponível 19/10 -- aula-macros.scm disponível 19/10 -- Nova versão das notas de aula (v.78) 19/10 -- Subsídios para T1: como usar threads e ouvir em portas TCP (no link das notas de aula) 19/10 -- Exemplo de prova disponível 18/10 -- Nova versão das notas de aula (v.77) 18/10 -- aula-continuacoes.scm disponível 17/10 -- aula-estado.scm disponível 16/10 -- Nova versão das notas de aula (v.76) 15/10 -- Nova versão das notas de aula (v.75) 14/10 -- Nova versão das notas de aula (v.74) 12/10 -- Alguns dos programas usados nas aulas estão disponíveis 11/10 -- Nova versão das notas de aula (v.73) 09/10 -- Nova versão das notas de aula (v.72) 08/10 -- Nova versão das notas de aula (v.71) 07/10 -- Descrições dos trabalhos 05/10 -- Horário de monitoria 03/10 -- Nova versão das notas de aula (v.70) 02/10 -- Nova versão das notas de aula (v.69) 29/09 -- Nova versão das notas de aula (v.68) 28/09 -- Nova versão das notas de aula (v.67) 27/09 -- Nova versão das notas de aula (v.66) 25/09 -- Nova versão das notas de aula (v.65) 25/09 -- Nova versão das notas de aula (v.64) 24/09 -- Nova versão das notas de aula (v.63) 23/09 -- Datas de provas e trabalhos marcadas 23/09 -- Nova versão das notas de aula (v.62) 23/09 -- Nova versão das notas de aula (v.61) 23/09 -- Nova versão das notas de aula (v.60) 22/09 -- Nova versão das notas de aula (v.59) 22/09 -- Nova versão das notas de aula (v.58) 21/09 -- Nova versão das notas de aula (v.57) 21/09 -- Nova versão das notas de aula (v.56) 21/09 -- Nova versão das notas de aula (v.55) 20/09 -- Nova versão das notas de aula (v.54) 20/09 -- Nova versão das notas de aula (v.53) 20/09 -- Nova versão das notas de aula (v.52) 19/09 -- Nova versão das notas de aula (v.51) 19/09 -- Nova versão das notas de aula (v.50) 18/09 -- Nova versão das notas de aula (v.49) 18/09 -- Nova versão das notas de aula (v.48) 18/09 -- Nova versão das notas de aula (v.47) 18/09 -- Nova versão das notas de aula (v.46) 17/09 -- Nova versão das notas de aula (v.45) 17/09 -- Nova versão das notas de aula (v.44) 17/09 -- Figuras do tutorial do Eclipse consertadas 17/09 -- Nova versão das notas de aula (v.43) 16/09 -- Nova versão das notas de aula (v.42) 16/09 -- Nova versão das notas de aula (v.41) 16/09 -- Pequenas modificações no tutorial de interface Scheme/C 16/09 -- Atualização nas instruções de instalação do Chicken para Windows 15/09 -- Nova versão das notas de aula (v.40) 14/09 -- Nova versão das notas de aula (v.39) 14/09 -- Nova versão das notas de aula (v.38)
Não deixe de verificar periodicamente as notas de aula!
Estes quadrinhos dão uma idéia de como programadores Lisp vêem sua linguagem:
O vencedor do desafio de IA do Google em 2010 é Gábor Melis, com um programa feito em Common Lisp. Veja o ranking!
A empresa americana ITA, especialista em informação sobre vôos, foi adquirida pelo Google. A ITA mantém um sistema grande e complexo escrito em Common Lisp; é um exemplo de história de sucesso de uma empresa que se manteve fora da "monocultura Java".
O App Inventor para o Android tem código Scheme! (Kawa):
"The compiler that translates the visual blocks language for implementation on Android uses the Kawa Language Framework and Kawa's dialect of the Scheme programming language, developed by Per Bothner and distributed as part of the Gnu Operating System by the Free Software Foundation."
Visão comparativa entre os paradigmas de programação. Paradigma funcional. Paradigma concorrente
Queremos que o aluno construa uma compreensão das linguagens de programação a partir de suas diferentes características e da maneira como estas características interagem.
O curso deverá trazer à atenção do aluno as diversas diferenças fundamentais entre grandes famílias de linguagens de programação, tanto em teoria como de forma prática. Esta visão tem efeitos importantes, nem sempre imediatamente perceptíveis: ao apreciar diversas técnicas de programação e mecanismos peculiares de linguagens de programação diferentes, o estudante expande seu leque de técnicas e rompe sua rigidez de concepção a respeito do que vem a ser programar. Além disso, há situações onde um paradigma se aplicará com mais sucesso do que outro. Pode-se sem dúvida afirmar que a programação em diferentes paradigmas auxilia na melhoria da qualidade da programação de forma geral.
Espera-se que o estudante se torne capaz de programar fluentemente nas linguagens escolhidas para exemplificar os diferentes paradigmas; que compreenda os fundamentos teóricos de cada paradigma de programação; que passe a conhecer diferentes mecanismos de funcionamento para as diferentes características de linguagens de programação (por exemplo passagem de parâmetros, vinculação de variáveis, tratamento de exceções e avaliação estrita ou preguiçosa); que se torne capaz de utilizar seletivamente conceitos e técnicas de diferentes paradigmas e linguagens em outros, quando for conveniente; e finalmente, que comreenda minimamente como linguagens de programação são projetadas, capacitando-se a desenvolver de maneira coerente e eficaz linguagens de domínio limitado.
O conceito final da disciplina poderá ser:
A avaliação ser composta de:
A avaliação final de cada aluno não será o resultado de alguma "conta" feita a partir dos valores das três avaliações. O resultado de cada avaliação reflete o desempenho do aluno em todo o curso até aquele instante, e não é apenas uma "nota isolada". Isso significa que cada avaliação leva em conta também o resultado das avaliações anteriores. De maneira simples, cada avaliação mostra qual seria o conceito final do aluno se o curso terminasse naquele instante.
Não há "prova substitutiva", porque tal conceito não faz sentido no sistema de avaliação descrito acima.
As descrições dos trabalhos estão aqui:
A coluna T1? indica se o trabalho 1 foi entregue (um "X" significa atraso, um "*" significa entregue no prazo).
RA após P1 T1? após T1 após P2 após T2 ------------------------------------------- 11102108 C X F F F 11033909 A * B A A 11078407 F 11014007 11037708 C * B B C 11026006 11014507 11076508 F 11043008 F * C F F 11068807 F 11103908 C * B B C 11105408 F * C 11106808 B 11031807 F 11056408 F 11079208 B * C F C 11114808 F * F F F 11022409 A * B B A 11090608 -------------------------------------------
Este programa está sujeito a mudanças simples. Grandes mudanças não devem acontecer.
I - 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 Modelos de gerenciamento de memória; coleta de lixo II - PROGRAMAÇÃO CONCORRENTE Processos, threads e formas de concorrência Problemas inerentes à programação concorrente Memória compartilhada: Semáforos Monitores Memória Transacional Passagem de mensagens: Passagem de mensagens síncrona e assíncrona
Datas das avaliações:
$ echo "(+ 1 2 3)" > /dev/schemix $ cat /dev/schemix 6Infelizmente, o desenvolvimento foi descontinuado.
A bibliografia secundária contém obras que, embora relacionadas ao curso, não são diretamente usadas (ou são de difícil obtenção).
Aqui há outras coisas para quem se interessar (incluem-se aqui outros paradigmas, e não apenas o funcional).