BT

O que faz valer a pena aprender Haskell para aplicações do mundo real

por Sadek Drobi , traduzido por Felipe Rodrigues em 16 Fev 2009 |

Mais de 750 pessoas comentaram no preview online do livro Real World Haskell. Como descrito por um de seus co-autores, John Goeerzen, em uma entrevista recente para a O’Reilly, o livro tráz uma introduz Haskell com código real, exemplos reais e dicas para exploração em um ambiente de negócios. Nesta entrevista, Goerzen explica porque, em sua opinião, vale a pena aprender esta linguagem; ele avança em suas peculiaridades e fala sobre alguns problemas que podem ser fonte de relutância.

John Goerzen adimite que Haskell requer muito re-aprendizado do básico e identifica purity e laziness como sendo os maiores impedimento para as pessoas que vem de programação imperativa / orientação a objetos.

Ele destaca que em Haskell, "as coisas que podem possívelmente mudar o estado do mundo são altamente isoladas" e "marcadas com o sistema de tipos". Isso ajuda a desviar de uma grande quatidade de bugs de implementação, já que elementos impuros de código são estaticamente tipados e erros podem ser identificados em tempo de compilação, que diferencia Haskell de outras linguagens com Python. Purity também facilita testes, por exemplo através do QuickCheck, especialmente se o programa é estruturado em volta de várias pequenas funções combinadas.

Outra noção central em Haskell é o laziness. Quando questionado sobre "de que forma laziness ajuda programas do mundo real" John Goerzen insiste sobre como isso é bom para I/O:

 

Se eu escrevo um pequeno filtro ou parser em Haskell, eu não tenho que me preocupar com os detalhes de ler o input linha-por-linha ou bloco-por-bloco porque eu posso simplesmente usar getContents e então eu encadear uma série de funções. Eu gosto de escrever filtros Unix em Haskell.

[…]Uma vez que você tenha o laziness no input, você tem o laziness no output porque imprimir algo não requer que tudo seja processado de uma só vez. […]

Você acaba com um programa com um design muito simples porque você não tem que lidar com buffers ou iterar sobre as linhas ou não e ainda roda em um espaço contante.

John Goerzen também fala sobre os benefícios da Haskell em termos de expressividade, alcançado por matching the patterns e o fato de que funções podem expressar coisas de forma sucinta mas legível, tornando mais fácil representar um problema e então, pensar na lógica, que é claramente identificável. Mais do que isso, como destacado pelos entrevistador, pode-se "construir um vocabulário de funções ou palavras e então escrever sua solução na linguagem deste vocabulário". Haskell, sem dúvida, manipula "funções tão fácil quanto Perl manipula strings", diz Goerzen.

Entretanto, algumas funcionalidades desta linguagem podem ser uma fonte de relutância para pessoas que vem do mundo da Programação OO / imperative. A abordagem recursiva, por exemplo, "pode ser um pouco assustadora" já que "incrementar uma variável é uma operação muitoa barata" em linguagens como C. No entando, Goerzen diz que, mesmo quando "linguagens de alto nível tendem a não ser tão rápida quanto C", o compilador GHC que reescreve de recursão em interação, "é bem eficiente em otimizar o que você expressa em termos recursivos em um formato que é justamente eficiente para a CPU".

Pode-se também acreditar que laziness troca "a habilidade de raciocinar sobre tipos e purity e tal pela inabilidade de raciocinar sobre a complexidade de tempo e espaço". John Goerzen prefere colocar isso em perspectiva:

[Isso é] como se eu olhsse para um programa em qualquer outra linguagem […] que tenta ler um arquivo inteiro de uma vez e então processá-lo. […] Você abriria o arquivo; você poderia chamar read, e ele poderia ler um arquivo inteiro pra você e colocá-lo na memória se você quisesse. Algumas pessoas poderiam fazer isso esperando lidar somente com arquivos em torno de 100K ou próximo. Você tenta dá-los um arquivo que tem 2GB e esta abordagem não funciona mais.

Baseado nesta expriência, John também desmente a crença de que o sistema IO da Haskell é pobre e difícil de aprender. De acordo com ele, a única coisa mais assustadora em Haskell, provavelmente são monads mas ele reforça que pode-se "escrever um programa perfeitamente bom que lida com IO sem ter que saber o que são monads ou o que eles fazem". Para usar o IO monad, não é necessário entender monads mas pode-se simplesmente considerá-los como "um tipo de caixa que separa o código puro do impuro".

Mais genericamente falando, John Goerzen acredita que mesmo assim há "uma pequena curva de aprendizado sobre como as coisas são chamadas em Haskell", a aprendizagem é facilitada porque "os tipos de funções dizem a você em boa parte o que elas fazem". Descobrir Haskell é, de acordo com ele, um "experiência de abrir a mente" e então se esta linguagem não se tornar a próxima grande linguagem, "será algo que é diferente e interessante e que vale a pena aprender de qualquer forma."

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT