Diretivas de compilação e versões do Delphi
Escrito por Carlos B. Feitoza Filho | |
Categoria: Artigos | |
Categoria Pai: Addicted 2 Delphi! | |
Acessos: 27448 |
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 :( |