Programação Funcional Contemporânea

MAC0434/MAC5765 - Tópicos em Sistemas de Computação - Segundo Semestre de 2010

Prof. Francisco Reverbel

. Informações Gerais
. Descrição
. Diário de bordo
. Trabalhos propostos
. Bibliografia
        
. Recursos adicionais na Internet
. Área da disciplina no Moodle
. Notícias e avisos
. Fórum de discussão

At work icon Esta página estará em permanente construção até o final do semestre...

Informações Gerais

. Horário: terças das 10:00 às 11:40, sextas das 8:00 às 9:40
. Local: IME-USP, bloco B, sala 6
. Assistente de ensino: Thiago Coraini (tcoraini arroba gmail ponto com)
. Avaliação: provas e trabalhos práticos
     . Primeira prova: 5 de outubro
     . Segunda prova: 7 de dezembro
     . Prova de recuperação de MAC0434: 14 de fevereiro de 2011, às 10:00, na sala de reuniões do bloco C

Descrição

MAC0434 (Tópicos em Sistemas de Computação) e MAC5765 (Tópicos em Sistemas de Computação I) são disciplinas que servem de "guarda-chuva" para o estudo de tópicos avançados relacionados ao desenvolvimento de sistemas de software numa variedade de áreas. Como já aconteceu no oferecimento imediatamente anterior dessas disciplinas, o assunto geral do segundo semestre de 2010 vai ser "Programação Funcional Contemporânea". Estudaremos a programação funcional sob uma ótica atual, trabalhando com linguagens recentes e tendo em vista dois campos de aplicação que estão na ordem do dia: (1) a utilização efetiva de máquinas multicore por programas concorrentes, e (2) a criação de aplicações distribuídas voltadas para a Web ou para a Internet.

Embora a programação funcional exista há mais de cinco décadas (Lisp apareceu em 1958), até pouco tempo atrás o uso desse paradigma de programação vinha se mantendo relativamente baixo e restrito a ambientes acadêmicos. Hoje, entretanto, o interesse por linguagens funcionais é crescente. Novas linguagens funcionais têm atingido níveis surpreendentes de difusão e de utilização fora da academia. O ressurgimento da programação funcional tem várias razões. Uma delas é a popularização das máquinas multicore, aliada à expectativa de que num futuro próximo nossos computadores pessoais tenham um número ainda maior de núcleos: 8, 16, 32, ... Muitos pesquisadores acreditam que o paradigma funcional (no qual as funções não tem efeitos colaterais) é o mais adequado para a criação de programas que façam bom uso de todos os núcleos de uma máquina multicore. Outra razão é o contraste entre as construcões sucintas (porém extremamente poderosas!) das linguagens funcionais e a verbosidade de linguagens como Java.

Nesta disciplina trabalharemos com as linguagens Erlang e Scala. A primeira é uma linguagem funcional pura, dinâmica e com excelente escalabilidade em situações de alta concorrência. A segunda é uma linguagem híbrida, que dá suporte tanto ao paradigma funcional como ao orientado a objetos e que favorece a sinergia entre esses dois paradigmas. Scala tem um sistema de tipos estático, mas permite que boa parte das declarações de tipos sejam omitidas em benefício da concisão (inferência de tipos). O compilador Scala gera código que roda na JVM e interopera com Java.

Tanto Erlang como Scala são empregadas por sistemas reais em ambientes de produção. Erlang existe há mais tempo e possui uma extensa coleção de bibliotecas e ferramentas para a construção de aplicações com qualidade e escala industriais. Entre os projetos de software livre baseados em Erlang, destacam-se o Yaws, que hoje é possivelmente o servidor Web com melhor escalabilidade na presença de alta concorrência, e o CouchDB, um banco de dados distribuído, tolerante a falhas, orientado a documentos e acessível por meio de uma API RESTful. Já a linguagem Scala, por ser interoperável com Java, se beneficia do vasto conjunto de bibliotecas e arcabouços disponíveis para o ambiente Java. Entre os casos de uso de Scala, destacam-se o Lift, um arcabouço expressivo e elegante para o desenvolvimento produtivo de aplicações Web, a migração do back end do Twitter de Ruby para Scala, e a migração do Foursquare de PHP para Scala/Lift.

A relação de tópicos que cobriremos ao longo do semestre está sujeita a alterações, mas deve incluir os seguintes ítens (não necessariamente nessa ordem):

Os pré-requisitos essenciais para esta disciplina são:

Note que não são necessários conhecimentos prévios de programação funcional e sim de orientação a objetos. (A parte básica de orientação a objetos em Scala será vista rapidamente, pressupondo-se que os conceitos subjacentes já foram aprendidos.) Experiência com programação em Java é um pré-requisito desejável (já que Scala é compatível com Java), porém não essencial.

Se você tem os pré-requisitos acima e não sabe ao certo se quer ou não quer cursar esta disciplina, leia o artigo Welcome to "The Functional Web", escrito por Steve Vinoski e recentemente publicado na IEEE Internet Computing. Esse artigo, curto (apenas 3 páginas) e fácil de ler, contém uma excelente motivação para o estudo da programação funcional contemporânea.

Trabalhos Propostos

. Primeiro exercício-programa. Prazo: 24 26 de setembro.
. Segundo exercício-programa. Prazo: 07 de novembro.
. Terceiro exercício-programa. Prazo: 08 de dezembro.

Bibliografia

. Joe Armstrong, Programming Erlang: Sofware for a Concurrent World. Pragmatic Bookshelf, 2007.
. Martin Odersky, Lex Spoon e Bill Venners, Programming in Scala: A Comprehensive Step-by-Step Guide. Artima Press, 2008.
. Steve Vinoski, Welcome to "The Functional Web". In IEEE Internet Computing, vol. 13, no. 2, pp. 104,102-103, March/April 2009.

Recursos Adicionais na Internet

. MAC0434/MAC5764 - Programação Funcional Contemporânea (2009)
. Erlang Programming Language, Official Website
. Getting Started with Erlang User's Guide
. Erlang Reference Manual User's Guide
. Joe Armstrong, Robert Virding, Claes Wikström e Mike Williams, Concurrent Programming in Erlang, Second Edition. Prentice-Hall, 1993.
Esse livro tem duas partes: a primeira é sobre a linguagem e a segunda sobre aplicações. Toda a primeira parte está disponível na Internet.
. Joe Armstrong, Making Reliable Distributed Systems in the Presence of Software Errors. Ph.D. Dissertation, Royal Institute of Technology, Stockholm, Sweden, 2003.
O capítulo 3 dessa dissertação descreve a linguagem Erlang de um modo um pouco mais formal e preciso que os outros textos do Armstrong.
. The Scala Programming Language
. The Lift Webframework
. Yaws - Yet Another Web Server
. The CouchDB Project


Valid CSS! Valid XHTML 1.0! Last modified: Mon Feb 7 12:04:20 BRST 2011
Francisco Reverbel