Lista de recursos da linguagem Delphi e versão em que foram introduzidos / obsoletos

113

Antes de começar, gostaria de salientar que, de maneira honesta e genuína, pesquisei repetida e exaustivamente no Google por esse tipo de coisa e não consegui encontrar nenhum.

Eu exijo (para um projeto que estou desenvolvendo) uma lista de todos os Delphi (de 2007 até a versão mais recente lançada, não suporte mais nenhuma versão anterior a 2007) "Recursos de linguagem", e as versões nas quais foram introduzidos e ( quando aplicável) obsoleto, aprimorado ou removido.

Eu observei perguntas semelhantes a esta no Stack Overflow antes, embora a maioria delas tenha sido formulada na forma de "qual recurso é o melhor" e encerrada como considerada inadequada.

Se alguém souber de tal lista (ou tiver tempo livre suficiente para compilá-la), eu ficaria muito grato.

A resposta aceita conterá um link para essa lista ou a própria lista.

LaKraven
fonte
P: Então, por que exatamente você precisa dessa lista? P: Você está tentando criar um conjunto de códigos (talvez um componente ou biblioteca) que ofereça suporte a todas as plataformas entre BDS2007 e XE2 (ou seja, não use recursos mais recentes do que BDS2007)? P: Se sim, por que não tentar compilar em 2007 e ver o que quebra? (PS: Ainda estou feliz usando o BDS2006;)).
paulsm4
8
Simon, verifique esta questão Lista variada de novidades em Delphi Language, RTL, VCL? , Também no meu blog mantenho uma lista
RRUZ
3
@ paulsm4 1) Para que eu possa levar em conta as limitações de recursos nas versões de bibliotecas públicas, 2) Sim (mas não necessariamente em uma biblioteca de componentes), 3) Porque é mais fácil saber com antecedência do que testar constantemente em versões diferentes todos os aspectos individuais de uma biblioteca . Teoricamente, o D2006 funcionaria bem, mas não vou apoiá-lo ativamente (sem ofensa).
LaKraven

Respostas:

158

Observe que esta resposta lista apenas os novos recursos de linguagem ,
não os novos recursos do VCL / FMX.

Aqui estão os links para o docwiki do RAD Studio:

A lista completa da Embarcadero: Novidades
Veja também: Lista de David I


Para resumir:

Delphi 10.3.x, 10.4 (ainda não lançado, isso é especulativo)

Delphi 10.3

  • O compilador Linux de 64 bits não usa mais ARC , ele usa o gerenciado manual padrão, que é o mesmo do compilador do Windows. Isso torna a portabilidade do código do Windows ou OSX para o Linux muito mais fácil.
  • Variáveis ​​inline com inferência automática de tipo
  • Suporte para AnsiChar / AnsiString de 8 bits em habilitar no Linux.
  • C ++ Builder e Delphi agora usam a mesma ABI para todas as chamadas.

Delphi 10.2 Tokyo

Delphi 10.1 Berlin

Delphi 10 Seattle

  • Suporte para Android 5.1.1 e iOS 8.4
  • Tratamento aprimorado de exceções OSX

Delphi XE8

  • Suporte para iOS de 64 bits;
  • Novos tipos de inteiros: FixedInt , FixedUInt tipos de inteiros de 32 bits em todas as plataformas;
  • Novos tipos inteiros dependentes de plataforma: LongInt , LongWord (64 bits no iOS-64, 32 bits em todas as outras plataformas);

Delphi XE7

Delphi XE6

Delphi XE5

Delphi XE4

Em XE4, isso mudou de forma que $ ENDIF se tornou um terminador aceito para $ IF, $ IFDEF, $ IFNDEF e $ IFOPT.

Delphi XE3

Delphi XE2

Delphi XE

  • A {$STRINGCHECKS}diretiva do compilador é ignorada no XE;
  • Novo valor de 16 bytes para a {$ALIGN}diretiva: os valores aceitáveis ​​para a {$ALIGN}diretiva agora incluem 1, 2, 4, 8 e 16.
  • nova {$CODEALIGN}diretiva, define o endereço inicial para um procedimento ou função.
  • A {$STRONGLINKTYPES ON}diretiva
  • Suporte para expressões regulares.

Delphi 2010

  • Delphi RTTI aprimorado (informações de tipo de tempo de execução).
  • Atributos
  • O asoperador pode ser usado para lançar uma referência de interface de volta ao objeto do qual foi extraída.
  • o is operador pode ser usado para verificar se uma referência de interface foi extraída de uma determinada classe.
  • Fundição inseguro normal pode ser realizado em uma interface: TObject(SomeInterface).
  • nova delayeddiretiva indica que uma biblioteca externa, como uma DLL não deve ser carregada no momento da declaração, mas deve esperar até a primeira chamada para o método
  • Construtor / destruidor de classe

Delphi 2009

Delphi 2007

  • Que eu saiba, nenhuma mudança de idioma;
    Observe que o Delphi 2007 é um lançamento ininterrupto, DCU's do D2006 funcionarão sem alterações no D2007 ;
  • (A 'personalidade' .NET de 2007 introduziu os genéricos )

Delphi 2006

Delphi 2005

  • for ... in rotações,
  • inline palavra chave
  • Caractere curinga na declaração de uso permitido
  • tipos aninhados
  • constantes aninhadas
  • {$REGION}/ {$ENDREGION}directivas

Delphi 7

  • três avisos adicionais do compilador:
    • Unsafe_Type,
    • Unsafe_Code e
    • Unsafe_Cast. Esses avisos são desabilitados por padrão, mas podem ser habilitados
  • nova diretiva de compilador {$WARN UNSAFE_CODE ON}
  • Sobrecargas de rotinas que formatam e analisam números, valores de data e hora e moeda usando uma TFormatSettingsestrutura.

Delphi 6

Delphi 5

Sem novos recursos de linguagem, mas:

Delphi 4

  • Matrizes dinâmicas
  • LongWorde Int64; Cardinalé um UINT32 (antes de ser um valor de 31 bits sem sinal)
  • Realleva 8 bytes e é o mesmo que double(anteriormente era 6 bytes);
    • Substitua pela nova {$REALCOMPATIBILITY ON}diretiva do compilador;
    • REAL48 substitui o antigo 6-byte real ;
  • Suporte para resourcestrings
  • Sobrecarga de método
  • Parâmetros padrão
  • {$EXTERNALSYM} e {$NODEFINE} diretivas
  • implements palavra chave para propriedades

Delphi 3

  • Wordbool, longbool e loja de bytebool true como-1 vez de 1 (Boolean permanece inalterado)
  • Os componentes devem ser instalados usando packages .
  • Asserções.
  • out parâmetros.
  • Widestring
  • interfacee dispinterfacepalavra - chave e dispidsuporte COM ( ).

Delphi 2

  • Suporte para 32 bits;
  • Ansistringsubstitui shortstringcomo o tipo de string padrão
  • Currency
  • Variant (para interoperabilidade com automação OLE).
  • Suporte para threading e ThreadVar palavra chave.
  • 4 bytes de dados são 4 bytes novos alinhados packed palavra-chave substitui esse comportamento;
  • TDateTime começa em 1899/12/30 D1, começou em0000/00/00
  • nova finalizationpalavra-chave
  • registere stdcallconvenções de chamada adicionadas.
  • packed palavra-chave.
Johan
fonte
Ah maravilhoso! Não consegui encontrar uma maneira de fazer com que o Docwiki me mostrasse páginas específicas para versões mais antigas do Delphi (pré XE2) ... não faço ideia por quê! Isso é maravilhoso e foi marcado como a resposta correta! Obrigado!
LaKraven
@DavidHeffernan É útil ter os novos recursos em 2007, pois isso define a linha de base ... de certa forma, saberei com certeza se uma parte do que estou produzindo talvez funcione em versões anteriores (mesmo que eu mesmo tenha sem intenção de apoiá-lo)
LaKraven
9
No meu blog mantenho uma lista
RRUZ
3
Caramba, ATRASADO, isso é INCRÍVEL! Por que eles não fornecem esta lista quando você faz o upgrade!
Peter Turner
1
Isso não é exato. $LIBPREFIXe outras diretivas existem pelo menos desde D7 (eu suspeito que D6, já que são relacionadas a Kylix)
Consultoria gratuita
16

Apenas para complementar a resposta de Johan verifique esta entrada no meu blog List of changes between versions of Delphi (Since Delphi 5)e a excelente página The TIndexque lista a maioria das novidades desde o delphi 2005 e recursos sobre cada uma delas.

RRUZ
fonte
Algum tempo atrás, outro site delphi delphi3000 foi marcado como perigoso para alguns antivírus.
RRUZ
2
Sou o proprietário do The TIndex e posso confirmar que é um falso positivo.
LachlanG
7

O jedi.inc arquivo usado pelo projeto Dephi JEDI expõe uma série de definições de recursos. Se o seu projeto for compatível com MPL, você pode até usá-lo para detecção de recursos e evitar o trabalho de reinventar aquela roda em particular.

Por exemplo, define SUPPORTS_FOR_INse o compilador oferece suporte a enumeradores. Pode-se envolver o código do enumerador em uma IFDEFverificação dessa definição, em vez de verificar uma versão específica do compilador.

afrazier
fonte
Sim, essa inclusão é certamente útil, mas falta a completude de uma lista detalhada (daí esta questão). Obrigado pela sugestão ... considere a resposta aceita a esta pergunta como um aprimoramento das informações fornecidas por jedi.inc :)
LaKraven
1
@LaKraven: Verdade, há muitas coisas que ele não consegue, mas para alguns pode ser o suficiente. Também tem a vantagem de já estar pronto. :-) Pessoalmente, acho que nivelar as hierarquias VCL, remover os cabeçalhos de copyright e jogar todos eles em um repositório de controle de versão também pode ser útil. Dessa forma, você pode ver quando determinados recursos RTL / VCL foram implementados.
afrazier
@LaKraven, acredito que jedi.incpelo menos preciso, enquanto a lista de Johan precisa de algumas verificações.
Consultoria gratuita