Tcl/Tk tem propriedades camaleônicas. Praticamente tudo pode ser modificado, o que pode resultar na criação de uma linguagem quase inteiramente nova. Por exemplo, se você não gostar do comando nativo [puts] porque está muito acostumado com ‘echo’, pode mudar o nome do comando:
% puts "Alô, mamãe!" Alô, mamãe! % rename puts echo % puts "Alô, mamãe!" invalid command name "puts" % echo "Alô, mamãe!" Alô, mamãe!
Se o segundo argumento de [rename] for a string vazia em vez de um nome novo para o comando a ser renomeado, o comando é apagado!
% rename echo {} % echo "Alô, mamãe!" invalid command name "echo"
Você pode querer “matar” alguns comandos em programas/scripts que aceitem dados digitados pelo usuário. Sem determinados comandos, o programa fica mais seguro.
Nossa… Realmente camaleônicas.
Interessante, me deu vontade de aprender a programar nisso, vou continuar lendo os posts dessa série…
Já deste ponto eu discordo. Não se deve tirar a liberdade do usuário, já que ele roda um programa por sua conta e risco em sua própria máquina.
Oi, Tiago. Só vi hoje o seu comentário. Preciso consultar o Aurélio sobre como receber avisos quando alguém comentar.
A liberdade de um mero usuário é diferente da liberdade do autor ou administrador. Se o tal “usuário” for autor ou administrador do programa e tiver acesso ao código, ele põe e tira o que quiser.
Eu me referia a situações em que o usuário só usa o programa, não tem acesso ao código. Por exemplo, um formulário de site que use Tcl como linguagem CGI. Imagine que o usuário preencha “[exec rm -rf ./]” em um dos campos e aperte o botão Enviar. Se você já programa, deve ter uma boa idéia do que faz o comando [exec] e de quanto estrago ele pode fazer. Se você apagar o comando [exec], pelo menos este perigo é evitado. Existem inúmeras maneiras de validar o que é digitado pelo usuário, e UMA delas é castrar a linguagem.
Na verdade, isso tudo foi só um exemplo muito simplificado moldado para o escopo ultra resumido do Codare. A maneira mais certa de se castrar a linguagem é usando *interpretadores seguros*. Resumindo: todas as outras linguagens que eu conheço têm um interpretador só executando o script inteiro, mas Tcl permite criar vários interpretadores paralelos, cada um deles completamente isolado e independente e com características próprias. É como ter várias Tcl dentro da Tcl, cada uma diferente se você quiser. Você pode criar um interpretador “capado” só para determinadas tarefas se achar melhor. É um modelo de segurança muito interessante. Se você quiser saber mais, vai ter que pesquisar. :-) Comece procurando por [interp create -safe].