LG_jc.gif (3670 bytes)
 






Programando para Linux

Para uma linguagem ser bem sucedida nos nossos tempos, é necessário que, poucas horas após o primeiro contato, o programador consiga escrever aplicações práticas. Poucas linguagens tornam tão verdadeiras essa premissa que tcl. Sua sintaxe é semelhante aos "shells" do unix, com construções que lembram, principalmente pela sua potência e expressividade, um pouco de Lisp. Mas o que tornou tcl tão difundida hoje em dia, é uma de suas extensões, desenvolvida originalmente para ela, o toolkit tk.

É admirável verificar que um comando tão simples como "pack [button .b -text "Alô, mundo!" -command exit]" possa se constituir em um programa completo, com direito a interface (GUI), que ocuparia várias páginas se escrito numa API mais convencional. Melhor ainda, se temos alguns comandos sem interfaces gráficas, ou pretendemos integrar várias aplicações que não se comunicam entre si, numa única, de modo transparente para o usuário, tcl tem as respostas para esse problema.

Apesar de não ser estritamente orientada a objetos, seus mecanismos – inclusive o comando namespace – compartilham de várias características OO como encapsulamento e overloading, além de ser facilmente estendida com novos comandos escritos em C ou C++. É quase impossível citarmos um banco de dados, servidor web ou formato de dados (como XML, por exemplo) que não seja completamente suportado por tcl. Com o tcl-plugin, por exemplo, podemos criar tclets – o equivalente no mundo tcl aos applets do Java – através de uma versão segura do interpretador que evita invasões no ambiente do programa-cliente (a minha apostilha de tcl/tk é na verdade uma coleção de páginas com conteúdo dinâmico pelo uso de tclets, podendo ser encontrada em http://members.xoom.com/rpragana/tcltk/titulo.html).

No lado do servidor, scripts cgi podem ser escritos, simplificados pelo uso de bibliotecas especialmente projetadas para esse fim. Existem também browsers, editores html, servidores, servidor/cliente para irc, e-mail e outros protocolos. O que torna essa linguagem multifacetada tão versátil?

A resposta pode não ser única, mas certamente contém componentes como: (1) por ser scriptável (eliminar o tradicional ciclo edição-compilação-teste), possivelmente o mesmo motivo que tornou Basic tão popular a despeito das suas inúmeras deficiências; (2) pela simplicidade – quase mesmo ingenuidade – dos seus comandos, com pouquíssima sintaxe e adoção de um tipo de dados homogêneo, strings; (3) pela comunidade crescente, com inúmeras extensões e aplicações disponíveis em forma de código-fonte, prontas para serem usadas e modificadas. O toolkit tk, ademais, foi muito bem sucedido, tendo em vista que foi feita a conversão dele para outras linguagens como o Perl, Python, Scheme, Prolog e outras.

Como se compara tcl com outras liguagens como Delphi(MR), Visual Basic(MR), ou Perl? A resposta em relação às duas primeiras é simples: o tcl é ordens de grandeza mais compacto. Considerando que a complexidade e tempo de desenvolvimento de um programa é aproximadamente proporcional ao número de linhas de código que este consome, podemos dizer que esta comparação é altamente favorável. Quanto ao Perl, a história é um pouco diferente. Perl é "scriptável" também, e quase tão veloz como tcl (versão 8.1). Entretanto, o Perl sofre de um sintoma bastante grave do "não foi escrito aqui", ou seja, a legibilidade dos programas deixa muito a desejar, o que é um pesadelo para a manutenção dos sistemas.

Apesar de existirem editores gráficos (GUI builders) para o tcl/tk, como o Visual Tcl (http://www.neuron.com/stewart/vtcl/), o SpecTcl (http://www.scriptics.com/spectcl), ou o XF (http://members.aol.com/xfguibuild), e mesmo alguns comerciais como o TclPro da Scriptics e o VisualGipsy (http://www.prs.de), a programação de interfaces visuais com o tcl/tk é bastante produtiva se feita em um editor de textos convencionais.

Pessoalmente, utilizo o vim, que tem suporte à sintaxe do tcl. Inúmeras outras ferramentas de profiling, depuração, prototipação, etc, específicas para o tcl/tk, existem. A própria arquitetura da linguagem torna essa tarefa mais simples, pela existência de comandos que nos permitem examinar a definição das funcões já existentes. Por exemplo "info body <proc>" retorna a definição de uma procedure. Algumas dessas ferramentas são dignas de menção, como o tkCon (http://www.hobbs.wservice.com/tcl/script/main.html), o TCL Developer (http://www.star.spb.ru/~small/tcldev), o tkInspect, e muitas outras.