domingo, 3 de abril de 2011

Criando um ambiente com testes em CLisp (clisp + quicklisp + lisp-unit)

Opa.


Cheguei em um dojo na Cinelândia em uma semana dessas aí às 20:30. Bueno, o dojo começava às 19:00, mas ninguém tinha começado a programar. O pessoal estava discutindo o editor de text Emacs (um clássico). Essa discussão vinha de uma outra sobre Lisp e outras coisas.  Entre um papo e outro o pessoal até tentou inciar o dojo com Lisp, mas faltava tudo: gerenciador de pacotes, ferramenta de teste, e afinal, qual Lisp íamos usar? Elisp, Clisp, Scheme, etc...


Na verdade a cabeça da galera estava um turbilhão de idéias [1].


Daí veio a idéia de escrever sobre as ferramentas que para testarmos o nosso código em Clisp. Não que eu domine Lisp, longe disso, mas nada que uma boa pesquisa não faça já que Clisp tem uma quieta porém ativíssima comunidade [2] .


Então, vamos ao resultado...



  • O Gerenciador de pacotes

Bueno, o pessoal do Dojo está bastante acostumado com as linguagens modernosas como Python, Ruby, Perl ou até Lua, onde se tem um gerenciador de pacotes que a gente roda direto da linha de comando do sistema (Linux : shell, Windows : cmd).


Em Clisp não achei nada parecido. Só achei sistemas (são vários) que rodam  dentro do prompt do Clisp. São eles o lispy, quicklisp e ASDF. Cada um tem suas peculiaridades, o ASDF é como um setuptools do Python e já está embutido no Clisp, enquanto os outros fazem todo o trabalho de baixar a biblioteca e instalar, mas não estão embutidos no prompt do 'siminino'. Porém, eles têm algo em comum, aliás com todas as ferramentas do Clisp: fazem questão de se apresentar claramente como bibliotecas de funções da linguagem e simplesmente são isso. Bati um pouco de cabeça com o lispy, nem lembro a razão de ter batido tanta cabeça. Fui logo para o quicklisp que tem uma interface melhor [3].


Vamos ao caso, instalá-lo e configurá-lo: Primeiro baixa o menino:

curl -O http://beta.quicklisp.org/quicklisp.lisp

Pode baixar apontando o navegador para o endereço acima, mas eu preferi o curl por uma questão de já baixá-lo e carregá-lo direto na chamada do interpretador Clisp, com:

clisp -i quicklisp.lisp

Depois disso haverão instruções para instalar o quicklisp. Divirta-se.


O quicklisp irá instalar todos os pacotes na sua pasta de trabalho. O melhor caso seria criar uma pasta para trabalhar ou até mesmo um usuário para brincar com o clisp. O projeto GNU deu seu tempo inclusive pra ensiná-lo a usar o clisp como seu prompt de comando padrão em sistemas UNIX[4] .




  • A ferramenta de testes


A ferramenta de testes que decidi usar foi o lisp-unit, é baseado no junit e todas as ferramentas de teste unitário comuns das linguagens mais usadas nas sessões de dojo. Existem diversas formas de chamar a ferramenta de testes e essas formas seriam bem legais de ser testadas em uma sessão de dojo. Eu fiz de vários jeitos, mas não cheguei a uma conclusão de qual é a melhor maneira de rodar os testes.

Para rodar os testes usamos a função define-test e os nomes utilizados para as funções são aquelas de asserção: assert-equals, assert-error, etc... Fácil não?!




Agora podemos começar a brincar com o Clisp nos dojos e colocar em prática o que aprendermos nessa aula aqui ó[5].


[1] Conversamos sobre tudo nesse dia. Até chegarmos à conclusão de que precisamos de um espaço com mais tempo para fazermos o que quisermos como katas, e alguns hackings.  Rumo ao hackerspace no Rio.
[2] http://www.cliki.net
[3] Vamos entender interface como algo para interagir. Aos novos, interface não é só interface gráfica.
[4] http://www.gnu.org/software/clisp/clash.html
[5] http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/