Zetta-Ømnis Soluções Tecnológicas
Desenvolvendo hoje a tecnologia do amanhã
Visite Nosso Patrocinador
Você está aqui:
DO NOT UNDERSTAND PORTUGUESE? CLICK ON THE FLAG TO CHANGE THE LANGUAGE!

Diretivas de compilação e versões do Delphi

Imagem meramente ilustrativa

Diretivas de compilação são basicamente uma forma de bifurcar a codificação ou de informar ao compilador como ele deve se comportar. Aqui nós vamos apresentar as várias diretivas de compilação que permitem incluir num mesmo arquivo físico (arquivo de código-fonte) código que é exclusivo para versões específicas do Delphi, portanto iremos focar na bifurcação de código e usando-a você será capaz de criar código que compila, por exemplo, tanto no Delphi 5 como no Delphi Tokyo, podendo gerar o mesmo resultado final em runtime.

Abaixo está a tabela completa com as diretivas de compilação para os Delphis desde a versão 1. Não estão sendo consideradas versões que contemplam .NET ou C++ Builder. O foco aqui é o Delphi puro.

IDE
(nome comercial)
IDE
(nome sequencial)
Library Suffix / Package Version
(utilizado na criação de BPLs)
VER<nnn>
(diretiva)
RTLVersion / CompilerVersion
(diretivas)
A ERA EMBARCADERO
Delphi Athens (12) Delphi 29 290 VER360 36
Delphi Alexandria (11) Delphi 28 280 VER350 35
Delphi Sydney (10.4) Delphi 27 270 VER340 34
Delphi Rio (10.3) Delphi 26 260 VER330 33
Delphi Tokyo (10.2) Delphi 25 250 VER320 32
Delphi Berlin (10.1) Delphi 24 240 VER310 31
Delphi Seattle (10) Delphi 23 230 VER300 30
Delphi XE8 Delphi 22 220 VER290 29
Delphi XE7 Delphi 21 210 VER280 28
 Delphi XE6 Delphi 20 200 VER270 27
Delphi XE5 Delphi 19 190 VER260 26
Delphi XE4 Delphi 18 180 VER250 25
Delphi XE3 Delphi 17 170 VER240 24
Delphi XE2 Delphi 16 160 VER230 23
Delphi XE Delphi 15 150 VER220 22
Delphi 2010 Delphi 14 140 VER210 21
A ERA BORLAND
Delphi 2009 Delphi 12 120 VER200 20
Delphi 2007 Delphi 11 110 VER185 19
Delphi 2006 Delphi 10 100 VER180 18
Delphi 2005 Delphi 9 90 VER170 17
Delphi 7 Delphi 7 70 VER150 15
Delphi 6 Delphi 6 60 VER140 14
Delphi 5 Delphi 5 50 VER130 n/a
Delphi 4 Delphi 4 40 VER120 n/a
Delphi 3 Delphi 3 30 VER100 n/a
Delphi 2 Delphi 2 20 VER90 n/a
Delphi 1 Delphi 1 10 VER80 n/a

Algumas observações a respeito da tabela acima merecem destaque:

  • O único Delphi 10 existente é o Delphi 2006, lançado em 2005. Versões mais recentes de Delphi que utilizam o número 10 no nome comercial da IDE não devem ser considerados Delphi 10, Delphi 10.1 ou Delphi 10.2. Isso é só uma jogada de marketing da Embarcadero e é exatamente por isso que estes números se encontram no nome comercial do produto. A versão real sempre se encontra no nome sequencial, o qual incrementa desde o Delphi 1. Meu conselho é que ao se referir às novas versões de Delphi, sempre se faça isso ou pelo nome sequencial ou pelo nome comercial sem citar "números de versões", pois estes não significam nada;

  • A partir do Delphi Alexandria a interpretação dos números nas versões fake que a Embarcadero inventou mudaram. Enquanto que os Delphis Seattle (10), Berlin (10.1), Tokyo (10.2), Rio (10.3) e Sydney (10.4) eram binariamente incompatíveis entre si de acordo com o segundo número da versão fake, o Delphi Alexandria (11) só é binariamente incompatível com seus sucessores[1], iniciando pelo Delphi Athens (12), isto é, sempre que se ouvir falar em Delphi 11, 11.1, 11.2, etc., elas estão se referindo ao mesmo Delphi (Alexandria) que mudou apenas o "update". Confesso que seria menos pior eles terem feito assim desde o começo, no entanto, o fato de ter mudado isso agora, só prova DE NOVO que estes números nada significam de forma prática e mais do que nunca se torna essencial que nos refiramos aos Delphis pelas suas versões sequenciais REAIS ou usando o nome comercial sem esses números. Em outras palavras, pelo amor de Deus, não fale Delphi 11.1, ou Delphi Alexandria 11.1. Fale Delphi Alexandria ou Delphi 28. Dessa forma não há confusão;

  • O Library Suffix (ou Package Version), claro, não é uma diretiva. Estes números são apenas identificadores que podem ser incluídos nos nomes dos pacotes (BPL) e que seguem uma sequencia própria, ligada diretamente à versão sequencial (nome sequencial) do Delphi. Para obter o Library Suffix do Delphi 2010, por exemplo, pega-se o nome sequencial do mesmo (Delphi 14) e multiplica-se este número por 10, logo, o Library Suffix do Delphi 2010 é 140. Pacotes BPL são dependentes da versão do Delphi onde eles foram compilados. Não é possível carregar no Delphi 2006 um pacote compilado no Delphi 7, por exemplo. É por esse motivo que é sempre boa prática identificar seu pacote de forma que se saiba, só olhando o nome do arquivo, com qual versão de Delphi ele é compatível. Nas opções do projeto de um pacote existe o campo "Lib Suffix", o qual pode ser preenchido com o valor correto para a versão atual do Delphi. Por exemplo, ao compilar o pacote "MeuPacote" no Delphi XE5, deve-se usar 190 na opção "Lib Suffix", dessa forma, o Delphi vai compilar automaticamente o pacote com esse número em seu nome, resultando em MeuPacote190.bpl. É por este motivo que você sempre vê por aí arquivos BPL nomeados desta forma. Conhecendo este detalhe, você pode, só de olhar o arquivo, saber se ele será ou não compatível com seu Delphi;

  • Historicamente as diretivas VER<nnn> seguem a versão do Compilador Pascal, sendo VER40 a diretiva que identifica o Turbo Pascal 4.0, por exemplo. Como tais diretivas existem até hoje, pode se considerar que elas representam a versão do Compilador do Pascal usado por cada versão de Delphi (IDE). Para o Delphi 2006, por exemplo, a diretiva é VER180, logo, o Compilador Pascal existente no Delphi 2006 seria equivalente a um compilador existente no Turbo Pascal 18.0, caso este existisse;

  • RTLVersion e CompilerVersion são uma forma identificar código compilável em várias versões de Delphi ao mesmo tempo. Enquanto as diretivas VER<nnn> identificam apenas um Delphi por vez, as diretivas RTLVersion e CompilerVersion permitem definir um código que compila, por exemplo, em todas as versões de Delphi a partir do Delphi 2006, bastando usar a diretiva RTLVersion >= 18 (veja a tabela!). A documentação a respeito de RTLVersion e CompilerVersion é um pouco controversa: ambas tem os mesmos valores e funcionam do mesmo modo, mas não achei nenhuma explicação realmente prática para justificar o uso de uma em detrimento da outra. Talvez a diferença seja só conceitual. O importante mesmo é entender que elas podem ser usadas da forma como foi explicada aqui;

  • Não existe o Delphi 13 e consequentemente o Library Suffix 130 porque americanos são muito supersticiosos e não gostam do número 13. Isso não impediu que a lenda da maldição dos Delphis pares existisse. De fato, existem versões pares que foram muito pouco utilizadas, só não se sabe se o motivo disso foi supersticioso ou se realmente estas versões pares não eram boas. Felizmente, com a advento das versões com nomes comerciais exóticos esta maldição parece ter sido finalmente anulada;

  • O Delphi 8 não foi considerado porque ele é uma espécie de Spin-Off da família Delphi que só trabalha com .Net. A decisão de tirar o Delphi 8 da lista foi tomada em um brainstorm de 4 horas que também gerou dois artigos científicos e uma teoria da conspiração[2].


1 Não foi citado no texto, mas evidentemente que o Delphi Alexandria também é binariamente incompatível com seus antecessores.
2 Mentira, o Delphi 8 saiu da lista porque ninguém se importa com ele :(
Acesso Rápido
Não digite mais que o necessário...



Escaneie este QRCode em dispositivos móveis para acessar a página atual rapidamente nestes dispositivos
Conteúdo Verificado!
#BULLSHITFREE #CLICKBAITFREE
#MONEYLESS
Este site é amigo do desenvolvedor do mundo real
Gostou do conteúdo?
Se você gostou do conteúdo que está lendo, você pode ajudar a manter este site no ar doando qualquer quantia. Use os botões abaixo para realizar sua doação.
 
É rápido, fácil e indolor :)
 

Estatísticas em tempo real

Visite Nosso Patrocinador