Se você desenvolve em Delphi há algum tempo, certamente já sentiu o peso das Generics.Collections. Embora tenham revolucionado a forma como manipulamos dados, elas trouxeram dois grandes vilões silenciosos: o Code Bloat (inchaço de código) e o aumento drástico no tempo de compilação.
No artigo de hoje, vamos explorar como o Project Dext resolveu esses problemas, trazendo uma nova arquitetura de coleções que não só compila mais rápido, mas entrega uma performance que deixa a RTL (Runtime Library) padrão comendo poeira.
O Problema: O “Imposto” das Generics
Sempre que você instancia um TList<TString> e um TList<TInteger>, o compilador do Delphi gera o código binário completo para cada uma dessas especializações. Em projetos grandes, com milhares de listas e dicionários, isso resulta em um tempo de build que testa a paciência de qualquer desenvolvedor.
Em testes reais, um projeto de grande escala que levava 8 minutos e 36 segundos para compilar, passou a levar apenas 3 minutos e 36 segundos após a adoção da estratégia do Dext.
A Solução: Code Folding Binário
A grande sacada do Dext foi implementar o Code Folding Binário. Em vez de o compilador gerar centenas de motores idênticos, as coleções compartilham um motor central único (TRawList), que opera de forma segura sobre fatias de memória bruta.
Pilares da Performance Dext:
- Recursão Especializada: Remoção de decisões (
if/case) dentro de loops internos. - Hybrid Sort: Combinação de QuickSort para grandes volumes e Insertion Sort para pequenas fatias (mais amigável ao cache da CPU).
- SIMD (Single Instruction, Multiple Data): Uso de instruções de hardware (SSE2/AVX) para processar múltiplos dados em um único ciclo de clock.
- Zero-Allocation: Uso de
VectoreSpanpara manipular dados sem criar cópias desnecessárias na memória.
Benchmarks: Dext vs RTL
Os números falam por si. Em cenários de tipos primitivos, a diferença é brutal:
| Operação | Cenário | RTL (ms) | Dext (ms) | Ganho |
| List Sort | 10k Inteiros | 0,54ms | 0,07ms | 6.8x mais rápido |
| IndexOf | 100 Inteiros | 0,008ms | 0,0002ms | 42x mais rápido |
| Dictionary Lookup | 100k itens | 6,61ms | 1,00ms | 6.6x mais rápido |
Exemplos de Utilização
1. Sintaxe Fluente e Expressiva
O Dext permite construir filtros e ordenações de forma muito mais legível, similar ao LINQ do .NET, mas unindo essa elegância à performance imbatível do código nativo.
Além disso, todo o motor de expressões garante segurança de tipos (type-safety) em tempo de compilação. Diferente de outros ORMs no mercado que dependem de “strings mágicas” (ex: .Where(‘Saldo > 5000’)), as consultas no Dext utilizam as propriedades reais dos objetos. Se o nome ou o tipo de uma propriedade for alterado na sua entidade, o próprio compilador do Delphi apontará o erro em todas as consultas afetadas instantaneamente. Isso blinda o seu código contra quebras silenciosas e surpresas desagradáveis em produção.
var
Clientes: IList<TClient>;
begin
var c := Prototype.Entity<TClient>;
// Sintaxe elegante e extremamente rápida
Clientes := Customers
.Where(c.Saldo > 5000)
.Sort(c.Nome.Asc)
.ToList;
end;
2. Concorrência com Canais (Lock-Free)
Inspirado na linguagem Go, o Dext introduz IChannel<T>, permitindo comunicação entre threads sem os gargalos de TCriticalSection.
var
Chan: IChannel<TOrder>;
begin
Chan := TChannel<TOrder>.CreateBounded(100);
// Thread de Produção
TTask.Run(procedure
begin
while Processing do
Chan.Write(ProduceOrder);
end);
// Thread de Consumo (Sem travas manuais!)
TTask.Run(procedure
begin
while Chan.IsOpen do
ProcessOrder(Chan.Read);
end);
end;
A expressão “fim das strings mágicas” ou “adeus strings mágicas” (no inglês magic strings) é um termo ótimo no mundo de engenharia de software para chamar a atenção de desenvolvedores C# ou Java que estão migrando de volta pro Delphi ou simplesmente estão cansados de cometer erros de digitação em queries de banco de dados e só descobrir em tempo de execução.
Conclusão
A migração para uma infraestrutura de coleções moderna como a do Dext é um caminho sem volta para quem busca alta performance, especialmente em aplicações Backend e processamento massivo de dados. Menos tempo esperando o build, mais tempo entregando valor.
E você, já sofreu com builds infinitos no Delphi? Deixe seu comentário!
Referências
ROMERO, Cesar. Como otimizamos as Coleções do Delphi e aceleramos o build em 60%. Disponível em: https://www.cesarromero.com.br/articles/dext-collections-performance/. Acesso em: 05 mar. 2025.
DEXT FRAMEWORK. Dext Project Repository. Disponível em: https://github.com/cesarliws/dext. Acesso em: 05 mar. 2025.
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.