quinta-feira, 2 de julho de 2009

ICFP2009 Contest

Mais um ICFP, mais uma tentativa, mais uma vez em Haskell... Só que desta vez não foi uma tentativa tão frustrada quanto a do ano passado! Diversos motivos me levam a crer isso:

  1. A linguagem Haskell deixou de ser uma barreira: as mônadas não são mais tão complexas para mim. Começo a entender por que Simon Peyton-Jones considera o nome warm, fuzzy thing mais apropriado
  2. Apesar de mais complexa (ninguém discorda que mecânica orbital é difícil) , os arquivos de entradas eram mais tratáveis, e não envolviam conexões com rede, comunicação entre processos, e outras coisas que nem são tão funcionais assim
  3. Tá certo que apanhei muito na elaboração da máquina virtual, mas muito mais por não consultar o HackageDB do que por não saber a linguagem. A quantidade de bibliotecas lá é consideravelmente grande, cobrindo diversas áreas de conhecimento
Não concluí por falta de tempo, e por ter tropeçado em algumas bobagens. Acho que a pior delas foi ter me atrapalhado na leitura do arquivo usando a biblioteca Data.Binary, pois não percebi que ela tinha algumas funções especializadas nos tipos nativos do Haskell e outras destinadas a leitura de tipos genéricos como o word32le (inteiro sem sinal de 32 bits em little-endian). Pra completar, depois que descobri essas funções acabei escrevendo uma função que lia um word64le e o tratava como número de ponto flutuante IEEE-754. Só que o tratamento de números de ponto flutuante estava em outra biblioteca, a Data.Binary.IEEE754, que só descobri na manhã de segunda-feira. Com todos os tropeços, só consegui concluir a máquina virtual na noite de quarta-feira, dois dias depois do prazo.

Pelo lado positivo, eu concluí a máquina virtual! Além disso, usei a mônada RWS sem grandes dificuldades, e meu código não tem space leak pois consegui que todas as rotinas iterativas fossem tail-recursive.

Semana que vem devo começar a tentar resolver os problemas. Coloquei como meta terminar as tarefas do concurso até o final deste ano, e sinto que vou conseguir bem antes disso.

2 comentários:

Roberto disse...

Bacana! Quero ver o código depois...

Rafael Gustavo disse...

Ainda estou escrevendo... vou postar os "highlights" a partir de amanhã, mas se vc quiser ver (ou brincar) pode olhar no SVN browser do Assembla que eu estou usando pra levar o código de um lado para o outro!

Postagens populares