Lisp, Emacs, SLIME, LoL, RoR e Videos.
July 29th, 2005
Para quem pretende usar Lisp, se não for em um ambiente comercial, aprender a utilizar o Emacs e algo obrigatório. Também é obrigatória a utilização do SLIME. A obrigatoriedade está pelo fato de obter-se um ambiente extremamente flexível, comparado com as melhores IDEs do mercado. Pois bem…
Recentemente o Bill Clementson estava brincando com o LoL (Lisp-on-lines). É, algo que segue a trilha do Ruby on Rails (achei que o nome também ficou legal, vai ver que é mais uma qualidade adaptativa do Lisp). Sem maiores comentários sobre o LoL por enquanto, a não ser a thread na lista do Ruby que achei bem interessante (para quem se interessa por DSL, é possível ver como o Ruby até pode adaptar-se muito bem em determinadas circunstâncias; a thread fala de Ruby, Lisp e até APL)
Mas o fato é que o LoL precisa do Uncommonn Web. Um framework baseado em continuações, estilo o Wee, Borges (Ruby) Seaside (Smalltalk), etc. O Marco Baringer, autor do Uncommonn Web fez um vídeo demonstrando o funcionamento do framework. São 51 MiB e existe uma versão .mov e um torrent. É bem interessante e mostra um pouco do poder do Emacs.
Como o SLIME é um ótimo complemento (tão bom que alguns utilizam o Emacs+SLIME em vez da IDE proprietária do LispWorks e Allegro CL) mas relativamente complexo para ser descrito em palavras, o melhor é mostrar o funcionamento. Pois o Marco matou a cobra e mostrou o pau. Criou um vídeo mostrando a instalação e utilização do SLIME. São 149 MiB e existe o .mov e torrent. Vou assistir em breve.
Alguns comentários sobre o vídeo:
Edi Weitz: “Great stuff”
Luke Gorrie: “Totally brilliant!!”
Paolo Amoroso: “What about a Grahammy award?”
Alguns comentários do IRC:
“wow, I’m learning so much new stuff from Marco’s slime movie :-)”
“it’s really good - I’m finally learning how to use the slime debugger!”
“The slime movie is awesome :^)”
“I’m learning new emacs tricks too! woohoo!”
“wow! I am blown away by the fact that you can evaluate an arbitrary expression *within* an arbitrary stack frame in slime’s debugger! really. blown away. damn cool.”
“this movie is fantastic”
“yeah, more lisp movies, more!”
“This slime video is so exciting I can’t stay in my pants”
“do watch the slime movie - it’s most excellent”
Os comentários foram extraídos do blog do Bill Cementson
Hora de você gastar um pouco de banda e baixar o vídeo e tirar suas próprias conclusões.
Existe um outro video em Flash para quem deseja uma introdução rápida.
Entry Filed under: Lisp
11 Comments
1. nemesis | July 29th, 2005 at 3:47 pm
hmm, os vídeos são grandes demais pra conexão discada, em casa. O próprio Emacs, carregado com tudo que tem direito já é imenso! Resultado: é mais jogo simplesmente baixar o software e instalar por conta própria do que aprender pelos vídeos… ^_^
de qualquer modo, obrigado pelos links interessantes…
2. Guaracy Monteiro | July 30th, 2005 at 1:31 am
> hmm, os vídeos são grandes demais pra conexão discada, em casa. O
O pessoal que tem banda larga acha que todo mundo tem uma. :/
> próprio Emacs, carregado com tudo que tem direito já é imenso!
> Resultado: é mais jogo simplesmente baixar o software e instalar por
> conta própria do que aprender pelos vídeos… ^_^
Não discordo de ti, mas tem muita gente que não gosta do Emacs pois ouviu falar mal e simplesmente repete. O vídeo pode desmistificar algumas coisas e, em 55 minutos, um analfabeto no Emacs pode ter uma idéia de como funciona. Se ele fosse instalar, ler documentação, etc, levaria *muito* mais tempo para aprender o que está ali.
Sem contar o fato de ver como um programador experiente desenvolve um programa em Lisp. No exemplo uma função para codificar/decodificar strings para código morse. :-)
3. Ronaldo | July 30th, 2005 at 12:33 pm
Excelente! Baixei os vídeos aqui e estou de queixo caído.
4. Dema | August 1st, 2005 at 2:21 pm
Fala Guaracy, ja deu uma olhada no LISP para .NET (L#)? http://www.lsharp.org/ Gostaria muito de ouvir seu comentário a respeito.
5. nem | August 1st, 2005 at 6:33 pm
“ja deu uma olhada no LISP para .NET (L#)?”
bom, não sou o Guaracy, mas intrometido que sou vou dar o meu: “Uau! Um LISP rodando em .NET, deve ser f### mesmo! Caramba! Agora sim, Lisp tá mudernu”
na verdade, claro que não…
e, vale lembrar, é uma camada de abstração a mais para se considerar na performance: uma VM rodando sobre outra… ugh!
6. Guaracy Monteiro | August 2nd, 2005 at 11:49 pm
> http://www.lsharp.org/ Gostaria muito de ouvir seu comentário a
> respeito.
Se não tiveres nenhuma ambição, pelo menos por enquanto, é baixar e brincar. O primeiro probleminha são as diferenças de sintaxe, já que foi ‘parcialmente’ baseada em Arc do Paul Graham. O segundo é como foi concebida. Basta digitar o exemplo de fatorial e depois (factorial 15) para ver os erros. Se trocar o 15 por 50 piora.
Se a intenção for aprender Lisp e/ou integração com .NET, sugiro:
Dot-Scheme. É uma ponte entre o PLT Scheme e .NET (Só o DrScheme já é um ambiente bem legal para brincar)
http://www.rivendell.ws/dot-scheme/tutorial.html
Para Allegro ou CLISP a RDNZL. Não testei mas deve ser mais complicado.
http://www.weitz.de/rdnzl/
(parece que tem outras mas não tenho os links).
7. Guaracy Monteiro | August 2nd, 2005 at 11:57 pm
> Um LISP rodando em .NET, deve ser f### mesmo!
Não. F# é outra. É uma ML ’similar’ ao OCaml mas ‘diferente’ para .NET. (tá, foi piada) :D
> e, vale lembrar, é uma camada de abstração a mais para se considerar
> na performance: uma VM rodando sobre outra… ugh!
Se fosse só. Mas a implementação é meio fraquinha e incompatível. É baseada parcialmente em Arc. Resumindo, mais um dialeto incompatível.
8. nemesis | August 3rd, 2005 at 3:05 pm
Com relação a arc, tenho que admitir que gosto do modo de pensar do Paul Graham. :) Fui dar uma olhada na página dele pra ver o status do projeto e me deparei com sua dissertação sobre arc não ser particularmente orientado-a-objeto.
http://www.paulgraham.com/noop.html
Trechos interessantes, convenientemente traduzidos para os fracos de coração:
“Programação OO é emocionante se vc tem uma linguagem estaticamente tipada sem clausuras léxicas ou macros. Até certo ponto, ela contorna essas limitações…”
“POO é popular em grandes companhias, pq ela se encaixa ao modo como eles escrevem software. Em grandes companhias , software tende a ser escrito por grandes (e com frequentes mudanças) times de programadores medíocres. OOP impôm uma disciplina a estes programadores que evita que eles façam muito estrago…”
e, meu favorito:
“POO gera um bocado de coisa que se parece com trabalho. Há muito tempo, havia um tipo de programador que escrevia apenas cinco ou dez linhas de código, precedidas por vinte linhas de cuidadosamente formatados comentários. POO é como crack para esse pessoal: ela permite incorporar toda essa papagaiada diretamente no código fonte. Algo que um hacker Lisp poderia fazer simplesmente adicionando um símbolo a uma lista se torna um arquivo completo de classes e métodos. Então, é uma boa ferramenta se vc quer se convencer, ou a alguma outra pessoa, de que vc está produzindo um bocado de trabalho.”
Não é por acaso que o cara é meu anti-herói favorito! :)
ah, sim, POO não é cocô em inglês, apenas sigla para Programação Orientada-a-Objetos. :)
9. Guaracy Monteiro | August 3rd, 2005 at 5:46 pm
> Com relação a arc, tenho que admitir que gosto do modo de pensar do
> Paul Graham. :) Fui dar uma olhada na página dele pra ver o status
> do projeto e me deparei com sua dissertação sobre arc não ser
Status? Deve estar igual ao de 2001. :-)
Atualmente, o negócio do Paul é jogar conversa fora, polemizar e estar na mídia. Com a grana que ele ganhou, Arc já poderia estar em produção há tempo. Mas está lá, um projeto dele para sei lá quem.
> “Programação OO é emocionante se vc tem uma linguagem estaticamente
> tipada sem clausuras léxicas ou macros. Até certo ponto, ela
> contorna essas limitações…”
Até podia ser correto no tempo dele. Não, não, nem no tempo dele. Smalltalk já estava lá para provar.
> “POO é popular em grandes companhias, pq ela se encaixa ao modo como
> eles escrevem software. Em grandes companhias , software tende a ser
> escrito por grandes (e com frequentes mudanças) times de
> programadores medíocres. OOP impôm uma disciplina a estes
> programadores que evita que eles façam muito estrago…”
Como falei, ele gosta de polêmica. Prefere chamar ou outros de medíocres ou dizer que para ser hacker precisa ter um Mac do que se manter no assunto. O fato é que a área dele não é OO. Enquanto ele não provar os outros sabores, ele vai continuar trocando os pés pelas mãos. O fato é que determinados problemas podem ser resolvidos mais naturalmente em um determinado paradigma.
> e, meu favorito:
>
> “POO gera um bocado de coisa que se parece com trabalho. Há muito
> tempo, havia um tipo de programador que escrevia apenas cinco ou dez
> linhas de código, precedidas por vinte linhas de cuidadosamente
> formatados comentários. POO é como crack para esse pessoal: ela
> permite incorporar toda essa papagaiada diretamente no código fonte.
> Algo que um hacker Lisp poderia fazer simplesmente adicionando um
> símbolo a uma lista se torna um arquivo completo de classes e
> métodos. Então, é uma boa ferramenta se vc quer se convencer, ou a
> alguma outra pessoa, de que vc está produzindo um bocado de
> trabalho.”
Realmente não sei o que ele está querendo dizer. Nem sei em que implementação de POO ele está se baseando. Não é o que acontece com Ruby , Smalltalk e outras. Ele devia falar menos e trabalhar mais em vez de só criar polêmicas. Ficar só na presunção de Arc ser uma linguagem para os próximos 100 anos. Como está ele vai é levar 100 anos para terminá-la. :-)
Ele poderia ler outros autores, como:
http://www.kuro5hin.org/story/2005/7/29/04553/9714
> Não é por acaso que o cara é meu anti-herói favorito! :)
>
> ah, sim, POO não é cocô em inglês, apenas sigla para Programação
> Orientada-a-Objetos. :)
Pelo visto também não és muito fã da POO. Ok, não e a salvação do mundo. Apenas mais um modo de programação, organização de idéias.
Mas Lisp está um pouco acima da questão ‘paradigma’. Para quem gosta de POO e sabe onde utilizá-la, tem o CLOS (acho que a maioria dos dialetos de Lisp implementam OO). Ah, temos um problema de restrições ou alguma programação não determinística. Lisp pode se adaptar com relativa facilidade. Screamer no problema. http://radio.weblogs.com/0102385/2003/03/12.html#a309
Sinceramente não acho que Lisp precise de outro dialeto. Pelo contrário, acho que necessita novamente de uma unificação e definição de algumas coisas novas que não foram definidas. Eu ficaria feliz se surgisse um ANSI/ISO/ECMA Lisp 2006. Poderiam jogar no lixo o resto (Arc, NewLisp, L#, etc).
(puxa, escrevi muito :)
10. nemesis | August 4th, 2005 at 1:51 am
“Atualmente, o negócio do Paul é jogar conversa fora, polemizar e estar na mídia.”
Não posso negar que ele é um tremendo bonachão.
Mas não tenho a menor sombra de dúvidas sobre sua grande paixão por Lisp: todo texto dele é quase religioso sobre o assunto e ele sempre trata John Macarthy com grande reverência. Ele já é milionário, não tem muito mais a fazer na vida do que desfrutar de seus hobbies. E, com certeza, programar e falar sobre programação Lisp é o seu número um. :)
mas, realmente, ele é bem parecido com o C.J.Date, que só faz reclamar do SQL sem mostrar como o cálculo relacional puro pode lidar com o mundo real…
“Com a grana que ele ganhou, Arc já poderia estar em produção há tempo.”
Com a grana do Bill Gates o Windows já era pra ser um sistema razoável há tempo.
“Mas está lá, um projeto dele para sei lá quem.”
Pra ele próprio? Se posteriormente alguém mais gostar, ótimo. Hobby…
“Prefere chamar ou outros de medíocres”
ora, ele estava apenas constatando um fato, o qual assino embaixo…
“O fato é que determinados problemas podem ser resolvidos mais naturalmente em um determinado paradigma.”
Concordo. Mas vc sabe tanto quanto eu qual paradigma único o mundo comercial usa como martelo, não? ;)
“Realmente não sei o que ele está querendo dizer. Nem sei em que implementação de POO ele está se baseando.”
Provavelmente, está falando de Java e C++, as duas mais usadas linguagens OO no mundo comercial, não de linguagens criativas como Ruby ou Smalltalk. Corporações comerciais geralmente odeiam criatividade.
E provavelmente estava tentando dar a entender que as toneladas de declarações repetitivas daquelas linguagens estáticas e OO fazem parecer que um bocado de trabalho foi realizado, quando na verdade era apenas o programador lutando contra as limitações da linguagem, sem ainda ao menos se concentrar nas regras de negócio.
“Para quem gosta de POO”
eu definitivamente não gosto de poo… :))
“Eu ficaria feliz se surgisse um ANSI/ISO/ECMA Lisp 2006.”
Pra dizer a verdade, eu ficaria um pouco mais feliz com Lisp ( em particular, Scheme ) se fizesse parte desse novo padrão um mecanismo para se interfacear de maneira elegante com o mundo exterior. Veja que não é o mesmo que pedir uma biblioteca imensa que simplesmente reproduza tudo o que já há disponível no OS, a la Java, mas sim reutilizar o que já existe, com mecanismos IPC padrão e FFCs…
11. Guaracy Monteiro | August 4th, 2005 at 6:08 pm
> Mas não tenho a menor sombra de dúvidas sobre sua grande paixão por
> Lisp: todo texto dele é quase religioso sobre o assunto e ele sempre
> trata John Macarthy com grande reverência. Ele já é milionário, não
> tem muito mais a fazer na vida do que desfrutar de seus hobbies. E,
> com certeza, programar e falar sobre programação Lisp é o seu número
> um. :)
O problema é que ele está vivendo do passado (dele). Ele teve sorte de estar no momento certo, na hora certa e com o aplicativo certo. Independente das características de Lisp, o produto que fez a fortuna dele nem é mais na mesma linguagem (até onde sei, a Yahoo reescreveu em C++). O que valeu foi a idéia.
> mas, realmente, ele é bem parecido com o C.J.Date, que só faz
> reclamar do SQL sem mostrar como o cálculo relacional puro pode lidar
> com o mundo real…
Enquanto isso, o pessoal implementa e trabalha com mapeamento objeto-relacional mostrando que as coisas podem funcionar em outros casos. Não interessa se é o melhor ou não afinal, ninguém usa apenas o melhor.
> Com a grana do Bill Gates o Windows já era pra ser um sistema
> razoável há tempo.
Eu prefiro comparar com pessoas ‘do bem’. Tipo o Mark Shuttleworth que ficou milionário, foi ao espaço e voltou e está por trás de projetos como o Ubuntu, ‘Freedom Toaster’ ( http://edison.tsf.org.za/toaster/ ), etc. :-)
> Pra ele próprio? Se posteriormente alguém mais gostar, ótimo.
> Hobby…
Pois é. Faz tempo que eu enviei um email para ficar sabendo de novidades e até agora nada. As únicas novidades foi o livro dele, alguns ensaios, quem usa Python é o cara e quem usa Java é medíocre e descobrir que eu sou um babaca pois não tenho Mac. :-)
>> “Prefere chamar ou outros de medíocres”
> ora, ele estava apenas constatando um fato, o qual assino embaixo…
Sim, existem medíocres em todos os lugares. Mas só vou chamar alguém comprovando o fato. Pior do que apenas chamar, é generalizar, como ele faz, para mim é apenas prepotência que não resolve nada. Apenas para adquirir inimigos (talvez alguns seguidores).
> Concordo. Mas vc sabe tanto quanto eu qual paradigma único o mundo
> comercial usa como martelo, não? ;)
O mundo comercial é um pouco diferente do acadêmico, científico ou outros. Para uma empresa pequena utilizar uma linguagem que não seja ‘mainstream’ pode ser fácil. Para uma empresa grande, fica bem mais complicado.
> Provavelmente, está falando de Java e C++, as duas mais usadas
> linguagens OO no mundo comercial, não de linguagens criativas como
> Ruby ou Smalltalk. Corporações comerciais geralmente odeiam
> criatividade.
Como ele generaliza, fica difícil saber. É como dizer: “os motoristas são barbeiros”.
> E provavelmente estava tentando dar a entender que as toneladas de
> declarações repetitivas daquelas linguagens estáticas e OO fazem
> parecer que um bocado de trabalho foi realizado, quando na verdade
> era apenas o programador lutando contra as limitações da linguagem,
> sem ainda ao menos se concentrar nas regras de negócio.
“…
In such a world one has only three choices: either join the producers of shoddy software, become a consumer of shoddy software, or find a way to make a living that doesn’t involve computers. …”
http://www.flownet.com/gat/papers/pch.html
> eu definitivamente não gosto de poo… :))
Sem problemas. O mundo seria muito chato se todos gostassem da mesma coisa. Imagine uma rua cheia de ‘Gol verde’ estacionados em ambos os lados, todos os motoristas com calças azuis e camisas amarelas. :-)
> Pra dizer a verdade, eu ficaria um pouco mais feliz com Lisp ( em
> particular, Scheme ) se fizesse parte desse novo padrão um mecanismo
> para se interfacear de maneira elegante com o mundo exterior. Veja
> que não é o mesmo que pedir uma biblioteca imensa que simplesmente
> reproduza tudo o que já há disponível no OS, a la Java, mas sim
> reutilizar o que já existe, com mecanismos IPC padrão e FFCs…
Acho que mecanismos já existem. O problema é: ‘adotar um padrão’. Vai ter uma turma que prefere um ORB, outra um SOA, outros outro. Cada um terá suas razões e, provavelmente, não estarão totalmente errados.
Para manter atualizado (’bleeding edge’) alguns softwares está ficando difícil. Uns utilizam o CVS, outros Subversion, Darcs e agora já tem o cogito. Scheme também tem seus problemas. É R5RS e um leque de opções, algumas com implementações parciais das SRFIs, outras implementando suas peculiaridades, umas rodam só aqui, outras só lá. Fato semelhante com Lisp. O próprio Smalltalk deixa uma liberdade adicional que causa problemas (o Seaside é desenvolvido no Squeak, tem um cara para manter uma versão para o VisualWorks e, teriam versões diferentes para implementações diferentes).
Enquanto tiver esta diversidade de implementações e cada um querendo mostrar o seu ego, fora alguns poucos casos especiais, acredito que estas linguagens não possuem chances em ambientes comerciais. Mesmo com alguém mostrando que é possível fazer dinheiro com elas.
A seleção natural é, geralmente, muito lenta.