Para comemorar a versão 1.0 do livro sobre Clojure resolvi voltar a estudar a linguagem.
Quando se começa uma nova linguagem é sempre difícil achar uma configuração de ambiente que seja confortável. Para common lisp a escolha é simples, slime é a melhor opção, porém, para qualquer linguagem que envolve a JVM é preciso pesar bem o uso de uma IDE estabelecida para java.
Para NetBeans existe o plugin enclojure, que funciona com o NetBeans 6.5. Ao instala-lo tive duas boas surpresas: a qualidade gráfica do NetBeans, que está com belas fontes com anti-aliasing e a segunda foi o fato do plugin em estágio alpha estar funcionando com REPL e tudo.
quarta-feira, 27 de maio de 2009
terça-feira, 19 de maio de 2009
Forth, Lisp e 8 bits
Forth é feito para maquinas pequenas. De uma olhada no código fonte em assembly dessa versão de forth:
http://www.annexia.org/_file/jonesforth.s.txt
Eles criaram uma maneira de eliminar o call de forma a economizar alguns bytes por chamada de função. Forth é muito legal. Vale sempre lembrar que foi feita uma versão para atari:
http://www.pelulamu.net/viznut/blog/2007-05-26/atari-forth-small.jpg
O lisp já tem outra filosofia, ele foi criado para fazer manipulação simbólica. Não faz muito sentido um lisp de 8, bits porque cada palavra da alocada possui alguns bits como tag de tipo. Tanto é assim, que o principal computador na época aurea do lisp era o PDP-10 que tinha 36 bits, portanto dava para usar 4 bits para tagging e sobravam 32 bitrts para armazenar os valores.
http://www.annexia.org/_file/jonesforth.s.txt
Eles criaram uma maneira de eliminar o call de forma a economizar alguns bytes por chamada de função. Forth é muito legal. Vale sempre lembrar que foi feita uma versão para atari:
http://www.pelulamu.net/viznut/blog/2007-05-26/atari-forth-small.jpg
O lisp já tem outra filosofia, ele foi criado para fazer manipulação simbólica. Não faz muito sentido um lisp de 8, bits porque cada palavra da alocada possui alguns bits como tag de tipo. Tanto é assim, que o principal computador na época aurea do lisp era o PDP-10 que tinha 36 bits, portanto dava para usar 4 bits para tagging e sobravam 32 bitrts para armazenar os valores.
sexta-feira, 8 de maio de 2009
Brief Incomplete and Mostly Wrong history of programming languages
Muito divertido esse post:
http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html
Especialmente para quem conhece a história do Lisp.
http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html
Especialmente para quem conhece a história do Lisp.
terça-feira, 14 de outubro de 2008
Aprendendo Scala
Estou aprendendo a linguagem de programação Scala, que é uma linguagem de programação funcional estaticamente tipada que gera código para a JVM e para .NET.
Scala é bastante elegante, com várias novidades no tratamento da tipagem que tornam a linguagem muito menos verborrágica que o java. A sintaxe para criar closures é particularmente elegante: x => expr
Porém, já descobri algumas coisas que eu estou sentindo falta:
Update: É possível fazer multiple-value-bind em scala:
Scala é bastante elegante, com várias novidades no tratamento da tipagem que tornam a linguagem muito menos verborrágica que o java. A sintaxe para criar closures é particularmente elegante: x => expr
Porém, já descobri algumas coisas que eu estou sentindo falta:
- Multiple values return: Em scala é possível retornar uma n-tupla, mas não é a mesma coisa, não é possível ignorar os valores secundários da função como no lisp, e especialmente, não existe a construção multiple-values-bind.
- Geração dinâmica de classes. É impressionante como é difícil fazer ORM em uma linguagem estática. Não existe nada no hibernate que permita fazer uma introspeção no banco e gerar o código da classes automaticamente, como o rails e o cakephp fazem. É preciso fazer uso de um gerador de código estático como o salto-db (ugle).
Update: É possível fazer multiple-value-bind em scala:
val (a,b) = (1,2)
a: Int = 1
b: Int = 2
segunda-feira, 6 de outubro de 2008
domingo, 17 de agosto de 2008
Testanto o rucksack
Elephant é uma biblioteca para persistência de dados em Common Lisp construída em cima do BerkeleyDB. A biblioteca tem uma boa documentação e uma comunidade de usuários e mantenedores ativa, porém, eu não consigo fazer ela funcionar no Linux 64 bits (No Mac 32 bits funciona). Já escrevi para a lista deles e nenhuma resposta. É um bug na invocação da função em C db-env-create da BerkeleyDB. Tentei eu mesmo debugar o código do elephant, mas não foi para frente.
Resolvi uma nova abordagem, hoje eu testei a biblioteca Rucksack. É um código menos maduro que o Elephant e aparentemente só um desenvolvedor o mantém, no entanto, o Rucksack não depende de nenhum código em C, é uma implementação de persistência totalmente feita em Common Lisp, inclusive com indexação por B-Tree. O desempenho me pareceu bom, consegui inserir mais de 26 mil registros em aproximadamente 140 segundos no MacBook.
É muito bonito fazer tudo isso sem sair do Lisp. Essa biblioteca parece ter um grande potencial, por exemplo, uma linguagem de queries OOP ou baseada em Prolog iria ser muito legal (uma espécie de AllegroCache Free software).
Resolvi uma nova abordagem, hoje eu testei a biblioteca Rucksack. É um código menos maduro que o Elephant e aparentemente só um desenvolvedor o mantém, no entanto, o Rucksack não depende de nenhum código em C, é uma implementação de persistência totalmente feita em Common Lisp, inclusive com indexação por B-Tree. O desempenho me pareceu bom, consegui inserir mais de 26 mil registros em aproximadamente 140 segundos no MacBook.
É muito bonito fazer tudo isso sem sair do Lisp. Essa biblioteca parece ter um grande potencial, por exemplo, uma linguagem de queries OOP ou baseada em Prolog iria ser muito legal (uma espécie de AllegroCache Free software).
terça-feira, 29 de julho de 2008
XEmacs no windows
No windows é melhor utilizar o XEmacs do que o GNU Emacs. Além dele possuir um instalador legal, ele reenderiza as fontes melhor que a versão do Stallman.
Uma curiosidade é que o XEmacs é um fork do GNU Emacs feito pela Lucid na esperança de escapar da falência após o AI Winter.
Uma curiosidade é que o XEmacs é um fork do GNU Emacs feito pela Lucid na esperança de escapar da falência após o AI Winter.
Assinar:
Postagens (Atom)