domingo, 29 de abril de 2007

Lisp no MacOS X

A grande vantagem do Mac OS é que é Unix e portanto todas as ferramentas de costume estão lá. A primeira e mais importante é o emacs, ele já vem instalado, porém somente uma versão texto. Mas existe a projeto MacPorts (antigo DarwinPorts) que permite instalar todos os programas open source com um comando.

Com o MacPort dá para instalar o feijão com arroz: Mysql, Postgres, Apache2, Ruby, Rails, etc. Tem o emacs tb, mas a melhor opção é utilizar o beta do emacs22 que tem suporta nativo para o Carbon (Uma das API's gráficas do OS X). Ok, temos emacs funcionando maravilhosamente bem. O segundo passo é escolher qual Lisp usar. O mundo apple conta com OpenMCL, porém ele só suporta PPC e x64, bad news, só tenho um Core Duo 1 que não aceita extenção de 64 bits :-(

Mas tudo bem, a minha primeira escolha de Lisp era o SBCL. A versão do sita, tanto o binário quanto a source funcionam muito bem (versão 1.0.4 e 1.0.5). O próximo passo é instalar alguns pacotes. Primeiro os mais fáceis, cl-ppcre, split-sequence. Tudo ok. Em seguida um mais difícil hunchentoot. Primeiro problema, a CL+SSL não acha a lib ssl em /usr/lib/libssl.so, isso é porque no darwin as bibliotecas não tem terminação .so e sim .dylib. Modifiquei o CL+SSL para procurar a versão do MacPort em /opt/local/lib/libssl.dylib, tudo funciona perfeitamente. Mandei um patch para os autores da biblioteca.

Segundo problema, o slime esta esquisito e o hunchentoot trava o REPL quando invocado. Tendo criar um thread e descubro que o SBCL foi configurado para unitrheads. Bad news. Lendo o arquivo INSTALL descubro como ativar as threads, deve-se criar um arquivo chamado customize-targets-features.lisp com o seguinte conteúdo:


(lambda (features)
(flet ((enable (x)
(pushnew x features))
(disable (x)
(setf features (remove x features))))
;; Threading support, available only on x86/x86-64 Linux, x86 Solaris
;; and x86 Mac OS X (experimental).
(enable :sb-thread)))


Recompilar e pronto. Beleza, tudo funcionando, porém estou vivendo no wild world do software experimental.

Nenhum comentário: