1930 – O Cálculo Lambda (λ-Calculus)
As teorias e
fundamentos matemáticos por trás da Programação Funcional tiveram
início na década de 1930 com o Cálculo Lambda – criado por
Alonzo Church.
É considerado a
primeira linguagem programação funcional – porém, não foi
projetada para ser executada em computadores, sendo apenas um
modelo matemático que descreve relações entre funções.
O Cálculo Lambda é tão importante que algumas linguagens
imperativas o estão incorporando. É o caso da versão 8 da
linguagem Java.
Alonzo Church consegui
criar um modelo que permitia construir funções mais complexas
através de relações entre funções mais simples.
1956 – As Primeiras Linguagens Funcionais
Lisp foi a primeira
linguagem de programação funcional; foi criada em 1956 por John
McCarthy, logo após a criação do FORTRAN. Isso faz de Lisp a
segunda linguagem de programação do mundo.
Muitas outras
linguagens funcionais foram criadas desde então – várias delas
foram derivadas de Lisp (os também chamados dialetos
do Lisp). Entre as quais cito Scheme (do MIT) e Clojure (que
roda na JVM).
Em 1996, Lisp foi
padronizada e passou a chamar-se Common Lisp.
Infelizmente, Lisp
nunca foi uma linguagem puramente funcional, pois agregava
componentes de linguagens imperativas (mudanças de estado, efeitos colaterais, comandos de controle, etc.).
1978 – A Grande Crítica!
Em 1978, John Backus (pai do FORTRAN, do BFN, etc.) publicou o artigo “Can Programming Be Liberated from the vonNeumann Style?” (A programação pode ser livre do estilo von
Neumann?) no Turing Award. Este artigo atacava severamente a
arquitetura de hardware baseada no modelo de von Neumann e
seus efeitos negativos sobre as linguagens de programação que
seguiam esse estilo. Ou seja, ele criticou o hardware atual e as
linguagens de programação do Paradigma Imperativo.
Ele demostrou que as
novas gerações de linguagens herdavam falhas de projeto das
linguagens antigas e adicionavam novas falhas; estas, por sua vez,
seriam herdadas pelas próximas gerações. Assim, essas linguagens
apenas cresciam de tamanho (ou, engordavam), porém, não
aumentavam seu poder.
Backus afirmava que as
pesquisas envolvendo novas linguagens de programação não focavam
novas ideias, mas sim, a criação de linguagens acomodadas a um
modelo já existente.
Porém, Backus exaltou
a Programação Funcional! Neste artigo, apresentou a Programação
Funcional como uma prática ferramenta de programação, deixando
claro que não se tratava de uma curiosidade matemática – que é
um estigma até os dias de hoje.
1980 – Acensão da Programação Funcional
Já na metade da década
de 1980, a comunidade de Programação Funcional estava em plena
movimentação – entre pesquisas, reuniões e conferências.
Várias técnicas
enovadoras foram propostas, como por exemplo: avaliação
preguiçosa (lazy evaluation).
Em meio a tantas ideias
e teorias, diversos cientistas individualmente propuseram e
implementaram suas próprias soluções computacionais; o que gerou
uma avalanche de linguagens de programação e de documentação
científica. Somente para exemplificar, segue a lista de algumas
linguagens funcionais que surgiram nesse período: Miranda, LML (Lazy
ML), Orwell, Alfl, Id, Clean, Ponder e Daisy.
1987 – Só uma Linguagem!
Das linguagens criadas
nesse período, somente a linguagem Miranda era comercial, madura,
tinha um bom projeto e era usada em produção. As demais, eram
esforços individuais dos cientistas – e não possuíam um bom
projeto de linguagem. Porém, de uma forma geral, todas possuíam
ideias muito interessantes – não era fácil provar que uma
linguagem era melhor que outra.
Muito bem, havia um
número enorme de linguagens e isso gerou desconforto na comunidade
de Programação Funcional. Então, surgiu a ideia de se criar uma
única linguagem que englobasse todas as melhores práticas de
projeto de linguagem, além de implementar as técnicas funcionais
que estavam sendo discutidas na época. Esperava-se que isso
trouxesse benefícios para toda a comunidade.
Em Setembro de 1987,
houve uma reunião, na conferência de Linguagens de Programação
Funcionais e Arquitetura de Computadores, em Portland - Oregon, para
discutir essa questão. Assim, foi decidido que uma comissão deveria
ser formada para projetar tal linguagem, com a finalidade de:
- Proporcionar comunicação mais rápida de novas idéias;
- Ser uma fundação estável para o desenvolvimento de aplicações reais;
- Ser um meio, através do qual, a Programação Funcional seria encorajada.
Essa comissão decidiu
não começar do zero e elegeu uma linguagem como base para o
projeto. Bem, a linguagem Miranda era a mais amadurecida e bem
projetada – entre as demais. Sendo assim, ela foi escolhida como
ponto de partida.
A nova linguagem foi
batizada de Haskell. Isso foi uma homenagem ao matemático
Haskell Brooks Curry – que contribuir com teorias fundamentais para
a Programação Funcional.
A versão 1.0 de
Haskell foi liberada em 1990. Em 1999, a linguagem e as bibliotecas
básicas foram padronizadas sob o nome Haskell 98.
Por Marcelo Parrela (marcelo.parrela@gmail.com)
Nenhum comentário:
Postar um comentário