Delphi 13: O “Upgrade Advisor” não é suficiente – Otimize seu Build na Raiz

Por que modernizar seu código fonte não basta se o seu compilador continua preso ao passado.

Se você está migrando projetos legados para o Delphi 13 (Athens), provavelmente já ouviu falar ou utilizou o Delphi Upgrade Advisor. Esta ferramenta é fantástica para identificar débitos técnicos: ela varre seu projeto, aponta referências circulares e, crucialmente, identifica o uso de Unit Aliases antigos (como o clássico WinTypes no lugar de Winapi.Windows).

Com a ajuda do utilitário reFind, o Advisor ajuda você a refatorar seus arquivos .pas, trocando os nomes antigos pelos novos namespaces qualificados.

Porém, aqui está a pegadinha: Mesmo que seu código esteja 100% modernizado (uses System.SysUtils, Winapi.Windows…), o Delphi continua injetando “lixo” silencioso no seu comando de compilação.

O Problema do Parâmetro Fantasma (-A)

Ao compilar um projeto, o MSBuild gera uma linha de comando para o dcc32.exe. Se você olhar o log de saída, verá algo assim, mesmo que seu código esteja limpo:codeText

dcc32.exe ... -AGenerics.Collections=System.Generics.Collections;WinTypes=Winapi.Windows...

Por que isso acontece?
O sistema de build do Delphi (CodeGear.Common.Targets) é configurado para ser “ultra-retrocompatível”. Ele injeta automaticamente uma lista de Aliases Padrão caso você não defina nenhum, ou concatena os padrões com os seus.

Por que isso é ruim?

  1. Processamento Desnecessário: O compilador precisa carregar essa lista de mapeamentos na tabela de símbolos e verificar cada uses contra essa lista de “apelidos”, desperdiçando ciclos de CPU em milhares de linhas de código que já estão corretas.
  2. Falsa Segurança: Se um desenvolvedor novo acidentalmente usar WinTypes em vez de Winapi.Windows, o código vai compilar. Isso gera uma regressão silenciosa, sujando o código que você acabou de limpar.
  3. Poluição de Log: Dificulta a leitura e depuração dos parâmetros de build.

Upgrade Advisor limpa o seu código, mas não limpa o comportamento do compilador.

A Solução Definitiva: A “Opção Nuclear” no MSBuild

Para ter um ambiente de compilação verdadeiramente limpo e performático, precisamos intervir onde o Upgrade Advisor não chega: nas regras de compilação do MSBuild.

A meta é forçar o Delphi a usar exatamente (e apenas) o que definimos no projeto. Se não definirmos Aliases, não queremos nenhum Alias.

O Passo a Passo

  1. Feche o RAD Studio.
  2. Navegue até a pasta bin da sua instalação (Ex: C:\Program Files (x86)\Embarcadero\Studio\37.0\bin).
  3. Faça um backup do arquivo CodeGear.Common.Targets.
  4. Abra o arquivo original com um editor de texto (como Administrador).
  5. Localize a seção <UnitAliases>. Você verá condicionais complexas que injetam WinTypes, BDE, Generics, etc.

Substitua todo o bloco lógico de UnitAliases por esta única linha diretiva:codeXml

<!-- Força o uso APENAS do que está no projeto, sem injeção de padrões -->
<UnitAliases>$(DCC_UnitAlias)</UnitAliases>

O Resultado

Ao fazer isso, você assume o controle.

  • Se o campo “Unit Aliases” nas opções do projeto estiver vazio, o parâmetro -A desaparece completamente da linha de comando.
  • O compilador dcc32 não perde tempo carregando tabelas de tradução de nomes legados.
  • Se alguém tentar usar WinTypes no código, o compilador lançará um erro “Unit not found” imediato, garantindo que o padrão de código moderno seja mantido.

Conclusão

Upgrade Advisor é o primeiro passo: ele corrige a sintaxe. Mas a otimização real vem da configuração do ambiente.

Não deixe seu compilador trabalhar com pesos mortos de 15 anos atrás. Se suas Units já estão no padrão correto, elimine os intermediários. Um processo de build limpo resulta em uma compilação mais rápida e um código-fonte à prova de regressões de legado.

Escrito por Anderson Rogerio Bejatto

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima