Smalltalk: variações sobre um mesmo tema

February 6th, 2007 § 21

Nos últimos dias, baixei e experimentei diferentes implementações de Smalltalk, tentando me decidir por uma delas. Existem dezenas de implementações diferentes, cada uma com suas vantagens e desvantagens. A linguagem em si, obviamente é a mesma, mas o que cada ambiente fornece ao desenvolvedor pode ir desde um simples workspace com a capacidade básica de programação e extensão até ambientes capazes de compilar e gerar executáveis para múltiplas plataformas.

Uma das primeiras coisas que eu notei foi o preço das implementações. Existem as grátis, é claro, e as voltadas para desenvolvimento não-comercial. Mas uma implementação paga, como a VA Smalltalk, por exemplo, chega a custar mais de 8 mil dólares. Para algumas, como a VisualAge da IBM ou a Cincom Smalltalk, da Cincom, eu não fui capaz de encontrar o preço. Não quero nem imaginar o preço destas implementações, já que, na minha experiência, se uma empresa esconde o preço de um produto é porque ele é caro demais.

Tanto a Cincom quando a Object Arts fornecem implementações gratuitas para desenvolvimento não-comercial. No caso, da primeira, o VisualWorks e no caso da segundo, o Dolphin Smalltalk. Este último é uma implementação puramente Windows, assim como o Smalltalk MT, da Object Connect.

Como meu objetivo é desenvolver tanto aplicações desktop como aplicações Web, meu alvo primário foi uma implementação que facilitasse as duas coisas e suportasse tanto Seaside como Glorp. Em cima disso, há o requerimento de que os executáveis possam rodar tanto no Windows como no Linux. Achei somente uma implementação que atende todos esses critérios: a da Cincom, VisualWorks. Como o problema do preço acima.

Existe, é claro, a Squeak, que atende os critérios acima mas cuja implementação é muito voltada para a área educacional e com um implementação de GUI própria que não me agrada muito. É uma implementação rápida e muito boa, mas com um propósito muito específico.

No momento, estou com Smalltalk MT, Dolphin Smalltalk e VisualWorks instalados. As duas primeiras são excelentes em termos de acabamento já que, sendo voltadas para Windows, adotam todas as convenções da plataforma. No Linux, estou somente com o Squeak e o VisualWorks. Esta última implementação, embora bem robusta, deixa muita a desejar em termos de interface, usando OpenMotif e, até onde eu sei, sem nenhum suporte a Qt ou GTK.

Com todas essas diferenças, eu fico imaginando se essa não é uma das causas da pouca aceitação da linguagem. Mesmo o fato de ser baseada em imagens não é um grande problema considerando que as objeções (geração de executáveis e desenvolvimento em equipe) já foi superado há muito pelas implementações. Eu até entendo Lisp não ser muito aceita, por ser uma linguagem mais esotérica; Smalltalk, por outro lado, é uma linguagem imperativa normal que não apresenta problemas de entendimento mesmo para o desenvolvedor novato. Provavelmente, uma implementação padrão e mais moderna tornaria a linguagem bem mais aceitável. Aliás, parece que esse é o alvo do pessoal por trás do #Smalltalk, baseada no .NET e ainda em amplo desenvolvimento. Essa eu não considerei pela relativa imaturidade.

Mesmo com todas essas considerações, permanece o fato de que Smalltalk é uma linguagem madura e extremamente relevante para o mundo moderno de desenvolvimento. Seaside e Glorp, pelo seu parentesco conceitual com Rails e ActiveRecord, estão dando um pouco mais de visibilidade à linguagem e eu não ficaria surpreso se mais aplicações comerciais aparecessem baseadas na mesma. Sem dúvida, todas outras linguagens e frameworks ganhariam muito com uma ressurgência do Smalltalk.

§ 21 Responses to “Smalltalk: variações sobre um mesmo tema”

  • silfar says:

    Cara, já vai voçê me encher a cabeça hein.

  • Ronaldo says:

    Se estou conseguindo fazer isso, o blog está funcionando. :-)

  • Ronie Uliana says:

    Rolando, por volta de 2003, eu andei às voltas com o VisualWorks mais seriamente. Se bem lembro o preço estava na casa dos milhares de dólares tb, algo entre 2 e 5, mas não lembro exatamente.

    Acho q o grande problema de aceitação do Smallktalk é a tipagem dinâmica e a falta de semelhança com C (pode rir, acho isso mesmo).

    Lembrando que a crescente aceitação de linguagens dinâmicas é recente, depois do BOOM do Javascript e do Rails (o framework, não Ruby, a linguagem). E mesmo assim, ainda existe muita resistência.

    Minha opinião pessoal e baseada em **rra nenhuma é q Smalltalk é uma linguagem que errou de época. Os conceitos dela são tão avançados q só hoje, 30 anos depois, começam a ser entendidos pelo grande público, e ainda parecem coisa de outro mundo pro programador comum, coisas como Virtual Machine e byte code (q muita gente ainda acha q a Sun inventou), Closures e um ambiente que você pode alterar “à quente” com a aplicação rodando.

    Outra coisa que segurou o Smalltalk: ninguém fez nenhuma killer application com ele. No Java houveram os “applets” e depois os “servlets”, no Ruby, o fenômeno é bem visível com o Rails.

    Sei lá, programação é um troço lesado, as melhores idéias são de 30 anos atrás e só houve regressão de lá pra cá. Ou não?

  • Ronie Uliana says:

    HAHAHA, inda escrevi “Rolando” ao invés de “Ronaldo”… Ê dislexia!!!!

  • Ronaldo says:

    Duas a cinco pilas estrangeiras? Provavelmente são tão poucas licenças vendidas por ano que precisa desse preço. Aliás, esse lance do preço é com certeza um deal breaker para programadores pequenos. Pagar esse monte de dinheiro só faz sentido para um empresa estabelecida já.

    Sobre a aceitação, concordo com esses outras causas. Com certeza sempre houve uma resistência a modos diferentes de pensar e linguagens dinâmicas sempre foram relegadas a segundo plano por causa disso. Mas, como você disse (eu me lembro de ter também comentado isso em algum lugar, não sei onde), a aceitação do Rails e Ruby está mudando isso bastante. Acho que estamos a poucos anos de uma segunda onde de programação e quem sabe o Smalltalk não renasça com isso.

    Quanto a melhores idéias, se consideramos o passado (Smalltalk, Lisp, Haskell, Objective-C) e o presente (Java, C#, VB.NET) não acho que você está longe da verdade. :-)

    Agora, Rolando é dose, né? O pior é que acontece com uma freqüência maior que o desejado. :-P

  • Walter Cruz says:

    Aliás, alguém precisa contar a história pros javistas novatos..

    Contar que não foi Java que inventou orientação a objetos.. Contar que Extreme Programming não nasceu no Java (e se dá muito bem com ruby, por exemplo). Contar que não foram os Javistas que inventaram a Refatoração. Já ouvi dizerem que Java seria mais adequada pra XP do que outras linguagens. É mole?

    Eu tenho um espinho na carne: não sei smalltalk. De fato, é tudo o que falaram: está tão adiantada no tempo, que poucos a entenderam.

    Acho que a falta de semelhança com C é um impecilho sim. E não adianta torcer o nariz, mas a primeira vista, isso é um empecilho pra python e ruby também (e nesse sentido, dá pra juntar as duas no mesmo saco, já que são [superficialmente] parecidas).

    Mas enfim, isso é teconologia e não religião :)

  • Ronaldo says:

    Bem, acho que dizer que sua linguagem é melhor não é um privilégio do pessoal do Java. Na verdade, acho que é um privilégio de quem conhece apenas uma linguagem–no sentido de somente se focar em uma–e acha que o resto não presta. O que o Paul Graham chama de programador de linguagem Blub.

    Eu acho que isso geralmente isso não acontece com quem usa Ruby, Python ou Smalltalk porque só o fato da pessoa estar usando essas linguagens indica que ela sabe mais de uma: quase sempre a pessoa começou com outra.

    Agora, eu acho que é religião. Já me chamaram tanto de herege que não sei mais o que pensar. :-)

  • Walter Cruz says:

    Hehehe

    Creio em Deus Perl todo poderoso…

    Eu não tenho nada contra a gente gostar do que usa e usar o que gosta. Só não pode atropelar a história por causa de nossos amores :)

  • Ronaldo says:

    Hehehe. Com certeza. E como diz o ditado, aqueles que não conhecem o passado estão fadados a repetir seus erros. Essa parece ser o padrão até o momento. Espero que iniciativas como JRuby e IronPython corrijam o problema.

  • Bem, voltando de uma semana de férias….

    Determinadas escolhas são realmente difíceis, pricipalmente se interface web e GUI estiverem misturadas. Eu não considero Squeak para GUI. Acho que só seria aceitável para web. A grande vantagem é que o Seaside é desenvolvido nele. Há algum tempo nem tinha para o Dolphin Smalltalk. Bem ou mal, a incompatibilidade entre as diversas versões é algo que pesa. O VisualWorks, se não me engano, trabalhava (também?) com um esquema de percentual sobre as tuas vendas.

    Com certeza as implementações oferecem um “plus a mais” para as versões Windows. Provavelmene por erro de desenvolvimento deles mesmo. Eu acho que o VW (e outras linguagens) poderiam/deveriam oferecer compatibilidade com, pelo menos, QT e GTK (fora a API do Windows).

    Nenhum Seaside ou Rails, mas para o lado servidor ou até olharia outras opções, com Erlang. Para o lado cliente (GUI), sou obrigado a admitir que gosto do Delphi pela praticidade, mas é só Windows (não sei como anda o Lazarus). inda não testei o GNAT com o glade nem olhei a versão aberta (só para programas abertos) do Visual Eiffel.

    Resumindo: acho relativamente simples para o lado do servidor, mas complexo se necessitar desenvolvimento de GUI para o cliente.

  • Ronaldo says:

    Depois de considerar as variações entre as versões, eu ainda estou completamente perdido.

    Eu ainda gostaria de ver um estudo de performance da VM Squeak, mas provavelmente é superior à VM Ruby, considerando o histórico das duas. Isso, ainda provavelmente, a torna aceitável para aplicações Web. Aliás, falando em VM, pena que o Strongtalk ainda não está em um formato de produção. Seria a escolha ideal para aplicações servidor.

    Eu não sei o que o pessoal do DabbleDB está usando, mas provavelmente é o VisualWorks. Mas realmente o preço é complicado. Mesmo com um esquema de percentual, ainda é difícil para uma empresa pequena.

    Eu andei olhando o UncommonWeb para o Lisp. Parece uma versão interessante do Seaside com uma maturidade boa. É uma outra opção.

    Já o problema de GUI é que atualmente eu não me vejo mais fazendo algo somente para o Windows. E aí a coisa complica. Eu gostei muito do RubyGTK, mas o desenvolvimento é bem lento. Aí volta ao Lisp, que tem também ambientes bons para desenvolvimento de GUI.

    Resumindo: continuo perdido. :-)

  • Fabio says:

    cara… eu trampo na IBM. Precisar de ajuda com o preço! :)

    alias, smalltalk é fogo hein? trampei um tempo com isso… foi um parto! como o ronie disse, é uma linguagem além do seu tempo… infelizmentenão é comercial, como java…

    hoje só trampo com java e php… pro que eu faço java é ótimo!

  • Ronaldo says:

    Opa, Fábio. Valeu pela oferta. Se eu conseguir me decidir, eu dou um toque.

    Eu estou experimentando mais uma vez com o Smalltalk depois de vários anos basicamente por causa do Seaside. Desde o lançamento do Rails algo não me impressionava tanto. :-)

  • Luiz Rocha says:

    Às vezes, eu imagino que o motivo pelo qual as linguagens (e tecnologias em geral) antigas serem mais avançadas e inteligentes que as novas se deve ao fato de que, em um certo momento, o mundo passou a ver a tecnologia e computação como a coisa que iria livrar o mundo dos fuscas e transformar ele em um Jetsons.

    A conseqüência é que todo mundo se focou em implementar tecnologia, em qualquer lugar, por qualquer motivo. Nesse ponto, todo o avanço que surgiu em linguagens de programação, sistemas operacionais e etc ficou alienado do dito “mundo real”.

    Hoje, um pouco por causa do movimento do software livre e muito por causa da internet, é extremamente simples ter contato com todo o capital intelectual. Diretamente, com Smalltalk, ou indiretamente, com Ruby, uma linguagem que bebe nas fontes de Smalltalk e LISP.

    O fato, que eu desconhecia, das diferentes implementações do Smalltalk realmente conspira contra sua larga adoção. Nesse aspecto, as linguagens abertas (Ruby, Python) – com seus ditadores benevolentes – tem uma vantagem enorme. :-)

    Para aprender Smalltalk (que eu assumidamente não sei), eu adotei o Squeak, independente das limitações que ele oferece. Eu preciso *aprender*. Mas esse sou eu e eu não sou parâmetro para nada.

    Por fim, a única GUI que eu escrevi com algum propósito além de aprendizado, eu usei wxWindows (com Python) e se provou razoável no que diz respeito a suporte para Windows e Linux.

    BTW, só para alongar ainda mais esse comentário mala, o Windows (a partir do NT 4.0) e mais recentemente o Mac (OS X) foram beber na fonte do Unix para se tornarem melhores e mais confiáveis. Mais um exemplo de uma tecnologia antiga que só foi reaproveitada depois de muito tempo.

  • Ronaldo says:

    Luiz, sua análise faz um bocado de sentido. A maioria das linguagens ditas comerciais da atualidade se curvam diante de uma realidade “mercadológica” que não permite muito refinamento. É só olhar para o Java e perceber como os dez anos de domínio dessa linguagem representaram uma estaganação em desenvolvimento que somente está sendo quebrada agora.

    O avanço das linguagens dinâmicas como ferramenta de uso diário está tendo um impacto enorme nos desenvolvedores das próximas linguagens. O C# 3.0 é um exemplo claro, onde conveções estão cedendo lugar a implementações extremamente funcionais de conceitos que antes só eram vistos em linguagens esotéricas.

    Ontem eu estava pensando nesse questão dos ditadores benevolentes e é em ponto que concordo.

    Sobre aprender, eu estou experimentando com VisualWorks e Squeak para estimar também as diferenças de implementação entre essas variações e observar a complexidade de portar implementação de um lado para o outro. O júri ainda está indeciso.

    Finalmente, sobre GUI, estou basicamente descartando o Smalltalk. As limitações realmente não fazem muito sentido. Por enquanto, continuo com o RubyGTK.

  • Walter Cruz says:

    O RubyGTK tem módulo pra glade não tem?

  • Ronaldo says:

    Tem, sim. Só que, da última vez que eu verifiquei, só funcionava sob o Linux. A versão para Windows ainda não era nem alfa, se não me engano.

  • Luiz Rocha says:

    Vc chegou a experimentar o GNU Smalltalk? Eu procurei alguma coisa sobre ele, mas encontrei muito pouco. E o Seaside, pelo que indica o website, não tem para o GNU Smalltalk.

  • Ronaldo says:

    Experimentei. É basicamente uma versão de linha de comando. Tem algumas particularidades interessantes e aceita arquivos de script. Não sei sobre a performance. Se eu tivesse coragem, iniciava um implementação do Seaside para ele, mas, para falar a verdade, não sei nem se é possível.

  • Thiago Silva says:

    Eu espiei o GNU Smalltalk ano passado, e me parece que tinham iniciado algum suporte para GTK (consegui rodar um script que mostra um diálogo).

    Hoje, tento aprender algo com o squeak, também para avaliar o seaside.

    E realmente, o Strongtalk anda devagar. Eu tenho acompanhado a lista, desde o relicenciamento da VM e, inclusive, tenho brincado com o código no meu tempo livre. Pelo que tenho lido e ouvido, é um pedaço de software incrível. Mas faltam voluntarios.

  • Ronaldo says:

    O GNU Smalltalk parece até ser interessante, mas foi justamente nesse dificuldade da GUI que eu esbarrei. Segundo o Alan Knight, criador do Glorp, há um porte do mesmo para o GST e eu imagino que o Seaside não seja difícil de portar também.

    O Strongtalk tem um potencial enorme. Só espero que seja realmente aproveitado.

  • § Leave a Reply

What's this?

You are currently reading Smalltalk: variações sobre um mesmo tema at Superfície Reflexiva.

meta