TList and Sort
No início deste mês houve uma interessante discussão em um newsgroup Delphi sobre possíveis otimizações no já eficiente algoritmo quicksort implementado por TList.Sort. A conversa contou com a participação ilustre do CTO da Developer Express, Julian Bucknall. Ontem uma segunda discussão nasceu sobre o mesmo assunto e trouxe novos elementos. É reconfortante ver como ainda existe vida inteligente no meio Delphi…
Tradução de Projetos Delphi
Tenho projetos Delphi com interface de usuário em Português, Inglês e Espanhol e por isso a localização de aplicações é um assunto importante para mim. Mesmo que você não tenha necessidade de outros idiomas, pelo menos para o português vai precisar traduzir seus projetos, de forma que as mensagens comuns da VCL e da RTL estejam no idioma do usuário.
No artigo Traduzindo resourcestrings expliquei o método de substituição de units para fazer a tradução estática de resourcestrings. É fácil, simples e eficiente. Essa técnica eu considero ainda a ideal para quem só precisa de um idioma. As limitações são maiores para quem precisa traduzir para vários idiomas.
Um problema do sistema de substituição de units é o controle de versões dos arquivos traduzidos. Quando sai uma nova versão do Delphi ou de componentes de terceiros, é bem trabalhoso identificar exatamente o que foi alterado dos resourcestrings, mesmo utilizando uma ferramenta de comparação de texto, como o Beyond Compare.
Outro problema, que só afeta quem precisa traduzir para mais de um idioma, é manter executáveis distintos para cada idioma. Por mais que utilize builds automatizados, seria muito melhor se fosse apenas um único executável
Para completar, a substituição de resourcestrings não afeta os componentes dos forms. Títulos de janelas, Captions de controles visuais e outras propriedades string precisam ser traduzidas de outro modo.
Recentemente descobri o projeto “GNU gettext for Delphi“, de Lars B. Dybdahl e Peter Thörnqvist. É um sistema de tradução open-source para Delphi baseado no tradicional GNU gettext, um excelente sistema de tradução que já se provou muito eficiente em diversas linguagens (inclusive para o PHP deste blog).
A versão de Lars e Peter é realmente especializada em Delphi. Sabe identificar strings de componentes direto de arquivos .dfm, resourcestrings em arquivos .pas, além da sintaxe tradicional _(’traduza isto’) do GNU gettext. Por outro lado, os arquivos “.mo” e “.po” são standards, o que permite utilizar ferramentas de edição como o poEdit.
Eu já vi diversos mecanismos de tradução de múltiplos idiomas para Delphi, inclusive comerciais, mas para mim o GNU gettext, gratuito e open-source, é mesmo o melhor sistema de tradução disponível para Delphi.
Compilação Rápida
A velocidade dos compiladores Pascal da Borland sempre foi excelente, reconhecida até pelos opositores da linguagem. Lá pelos anos 80 e início dos anos 90, os recursos de hardware eram extremamente limitados, portanto a velocidade do compilador fazia muita diferença. Outra coisa incrível na época era a IDE integrada ao compilador do Turbo Pascal - uma grande novidade!
Sugestão: vale a pena dar uma lida na história do Turbo Pascal no Wikipedia.
O antigo Borland Pascal tinha três opções de compilação: “Compile”, “Make” e “Build”. “Make” e “Build” tinham a mesma função de “Compile” e “Build” do Delphi atual, respectivamente. Já a antiga opção “Compile” executava somente a compilação do arquivo corrente na janela de edição.
Eu gostava muito de usar a “Compile” (Alt+F9) porque em um projeto grande era muito mais rápido só verificar se tinha algum erro de sintaxe na unit corrente do que compilar o projeto inteiro. Lembrem-se que naqueles tempos um computador não tinha mais que 2MB de memória RAM e um disquete de 360Kb! (sim, meninos, por incrível que parece eram mesmo 2 MB, não 2 GB).
A velocidade de compilação do Delphi continua muito rápida, mas o processo de montar um executável é pesado, principalmente se forem usados muitos componentes de terceiros.
“Vou compilar, mas não vou montar agora”
A função “Syntax Check” do Delphi é similar ao antigo “Compile”. “Syntax Check” apenas compila as units do projeto para verificar se a sintaxe do código está correta, mas não gera o executável, pulando a etapa de pesquisar, ler e escrever todos os packages de componentes do seu projeto. Sempre esteve ali, embora ignorado por muita gente. Só fica faltando uma coisa: o atalho!
Para criar uma nova tecla de atalho para a IDE do Delphi eu uso a opção “IDE Menu Shortcuts” do GExperts.

O menu da IDE é reproduzido nessa janela. Basta selecionar a opção que você quer (Project | Syntax Check) e teclar o atalho no campo “Shortcut”.
Pronto, agora meu Delphi entende que eu quero verificar a sintaxe do projeto rapidamente quando digito Alt+F9.
