Realidades Paralelas

Thursday, April 28, 2005

Sobre software

The problem is that software is different from other merchandise. Computer programs are the most intricate, delicately balanced and finely interwoven of all the products of human industry to date. They are machines with far more moving parts than any engine: the parts don't wear out, but they interact and rub up against one another in ways the programmers themselves cannot predict.

James Gleick, Chasing Bugs in the Electronic Village

Gleick é jornalista científico, autor do premiado livro Caos - A Criação de uma Nova Ciência, entre outros.

Thursday, April 21, 2005

O destino de Perl 6

Às vezes as coisas tomam um rumo engraçado: há séculos que a comunidade Perl promete a versão 6 da linguagem, e que ela vai ser a melhor coisa desde pão fatiado. Enquanto isso, a maior parte do desenvolvimento se arrasta interminavelmente no trabalho com a VM Parrot, e nada de ter um compilador disponível para Perl 6. E isso porque a nova versão foi anunciada há uns 4 anos...

Aí um cara teve a idéia de fazer um protótipo do interpretador. Escrevendo em Haskell. Aí começaram a aparecer hackers tanto da comunidade Haskell quanto da comunidade Perl interessados em ajudar e, em menos de dois meses, existe um protótipo disponível. Ele se chama Pugs. O progresso tem sido incrivelmente rápido, e pelo andar da carruagem eu não duvido nada que o Pugs, que começou como um projeto de uma pessoa só (Autrijus Tang) e totalmente sem o apoio da equipe Perl 6, seja promovido a oficial. Isso acontecendo seria uma ótima notícia para Haskell, que ganharia popularidade em uma comunidade mais mainstream. Mas eles provavelmente reescreveriam o interpretador em C, aos poucos.

Tuesday, April 12, 2005

Tipos e regiões

No embalo dos estudos sobre garbage collection, estou estudando gerenciamento de memória baseado em regiões. E teoria dos tipos também. A idéia é tentar generalizar algumas técnicas relacionadas a regiões e pensar em gerenciamento de memória baseado em tipos (type-directed memory management). Não sei se vai sair algo daí, talvez nada, talvez minha dissertação, mas é uma investigação. Veremos.

Redução de grafos de combinadores e outros efeitos colaterais

A atividade agora é implementar uma máquina de Turner de redução de grafos de combinadores para implementação de linguagens funcionais. O objetivo real não é implementar linguagens funcionais, até porque uma máquina de Turner pura é uma tećnica muito antiga, mas observar o comportamento de várias estratégias de garbage collection. E nem é uma implementação nova, mas uma reimplementação, porque isso já existia mas numa versão completamente horrenda, em C. É a versão que veio direto do poço da menina de O Chamado, e eu estou tentando envia-la de volta ao limbo.

A nova versão é em OCaml, claro. Pensei em fazer em Haskell mas como uma parte do programa simula um heap imperativo, isso só me deixaria duas opções: fazer tudo de forma funcional, o que seria extremamente ineficiente; ou espalhar mônadas na maior parte do programa, o que não agrada muito meu senso estético. Nesse caso, as características interativas em OCaml resolvem tudo de forma simples e elegante, logo é a ferramenta mais adequada para a situação.

Ah, e o coletor de lixo usa contagem de referências. Por incrível que pareça. Mas as técnicas utilizadas permitem coleta de ciclos e tudo, embora eu ainda não veja muitas vantagens com relação a utilizar um coletor de cópia generacional, ou as abordagens híbridas comuns atualmente.