Programando
para LinuxPara 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.
