MAC0319/MAC6902 - Programação Funcional Contemporânea

Segundo Semestre de 2012

Prof. Francisco Reverbel

. Informações Gerais
. Descrição
. Trabalhos propostos
. Bibliografia
        
. Recursos adicionais na Internet
. Área da disciplina no Moodle
. Quadro de 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

. Ementas: MAC0319 e MAC6902
. Horário: terças das 16:00 às 17:40, sextas das 10:00 às 11:40
. Local: IME-USP, bloco B, sala 39
. Assistente de ensino: Ana Luiza Basalo (ana_luiza_basalo arroba yahoo ponto com)
. Avaliação: provas e trabalhos práticos
     . Primeira prova: 5 de outubro
     . Segunda prova: ...

Descrição

Estudaremos a programação funcional sob uma ótica atual, trabalhando com linguagens recentes e tendo em vista dois campos de aplicação que vêm motivando intensas atividades de pesquisa: (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, o CouchDB, um banco de dados distribuído, tolerante a falhas, orientado a documentos e acessível por meio de uma API RESTful e o Riak, um banco de dados distribuído, escalável e tolerante a falhas que implementa as idéias do Dynamo paper da Amazon. 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.

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: 11 de setembro.
. Segundo exercício-programa. Prazo: 15 de outubro.
. Terceiro exercício-programa. Prazo: 06 08 de novembro.

Bibliografia

. Joe Armstrong, Programming Erlang: Sofware for a Concurrent World. Pragmatic Bookshelf, 2007.
. Martin Odersky, Lex Spoon e Bill Venners, Programming in Scala, Second Edition: A Comprehensive Step-by-Step Guide. Artima Press, 2010.
. 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

. 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.
. Dean Wampler e Alex Payne, Programming Scala. O'Reilly, 2009.
Esse livro está disponível na Internet no formato HTML.
. The Scala Programming Language
. The Lift Webframework
. MAC0434/MAC5764 - Programação Funcional Contemporânea (2011)
. MAC0434/MAC5764 - Programação Funcional Contemporânea (2010)
. MAC0434/MAC5764 - Programação Funcional Contemporânea (2009)


Valid CSS! Valid XHTML 1.0! Last modified: Tue Nov 6 00:09:33 BRST 2012
Francisco Reverbel