Antes de comenzar, me gustaría señalar que honesta y genuinamente he buscado en forma repetida y exhaustiva a través de Google tal cosa, y no he podido encontrar una.
Necesito (para un proyecto que estoy desarrollando) una lista de todas las "Características del lenguaje" de Delphi (2007 hasta la última versión publicada, ya no soy compatible con ninguna versión anterior a 2007), y las versiones en las que se introdujeron y ( cuando corresponda) obsoleto, mejorado o eliminado.
He notado preguntas similares a esta en Stack Overflow antes, aunque la mayoría de ellas se expresaron en forma de "qué característica es la mejor" y se cerraron por considerarlas inadecuadas.
Si alguien conoce esa lista (o tiene suficiente tiempo libre para compilar una), estaría muy agradecido.
La respuesta aceptada contendrá un enlace a dicha lista o la lista misma.
fuente

Respuestas:
Tenga en cuenta que esta respuesta solo enumera las nuevas funciones del idioma ,
no las nuevas funciones VCL / FMX.
Aquí están los enlaces al docwiki de RAD Studio:
La lista completa de Embarcadero: Novedades
Vea también: Lista de David I
Para resumir:
Delphi 10.3.x, 10.4 (aún no ha salido, esto es especulativo)
Delphi 10.3
Delphi 10.2 Tokio
@operador solo se permite cuando se realiza la conversión de la matriz.Delphi 10.1 Berlín
[weak],[unsafe]y[volatile]son compatibles con todos los compiladores.Delphi 10 Seattle
Delphi XE8
Delphi XE7
Nuevas rutinas intrínsecas del compilador (sin documentar):
function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;Delphi XE6
Delphi XE5
necesita un dispositivo con ArmV6 + Neon o ArmV7 para la implementación
introduce la definición condicional de ANDROID
Delphi XE4
Las siguientes nuevas condicionales se introducen / habilitadas en XE4:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
NEXTGEN
UNDERSCOREIMPORTNAME
weakref
WEAKINSTREF
WEAKINTREF
dependencydirectiva para especificar las dependencias de una biblioteca externa (sin documentar hasta XE8).Tenga en cuenta que gran parte del trabajo preliminar para ARC ya estaba en XE3, pero gran parte estaba deshabilitado
$IFdeclaraciones sólo se podrían terminar con$IFEND, y el$IFDEF,$IFNDEF,$IFOPTdirectivas sólo podían ser terminados con$ENDIF.En XE4, esto cambió de modo que $ ENDIF se convirtió en un terminador aceptado para $ IF, $ IFDEF, $ IFNDEF y $ IFOPT.
Delphi XE3
AtomicExchange(),AtomicIncrement(),AtomicCmpExchange(),AtomicDecrement()Delphi XE2
PackedAhora fuerza la alineación de bytes de registros (antes de XE2 no necesariamente hacía esto)Se han agregado ocho DEFINEs nuevos:
ALIGN_STACK
CPUX86
CPUX64
MACOS (sistema operativo Mac)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
WIN64
usescláusula.{$ExcessPrecision on/off}directiva del compilador (solo x64)Delphi XE
{$STRINGCHECKS}directiva del compilador se ignora en XE;{$ALIGN}directiva: los valores aceptables para la{$ALIGN}directiva ahora incluyen 1, 2, 4, 8 y 16.{$CODEALIGN}directiva, esto establece la dirección de inicio para un procedimiento o función.{$STRONGLINKTYPES ON}directivaDelphi 2010
asoperador se puede utilizar para devolver una referencia de interfaz al objeto del que se extrajo.isoperador se puede utilizar para verificar si se extrajo una referencia de interfaz de una determinada clase.TObject(SomeInterface).delayeddirectiva indica que una biblioteca externa, como una DLL, no debe cargarse en el momento de la declaración, sino que debe esperar hasta la primera llamada al método.Delphi 2009
stringahora se asigna aUnicodeString;{$HighCharUnicode on|off}directiva del compiladorfunction Default(T): Tfunción intrínseca (indocumentada){$PointerMath on|off};W1057 Implicit string cast from '%s' to '%s',W1058 Implicit string cast with potential data loss from '%s' to '%s',W1059 Explicit string cast from '%s' to '%s',W1060 Explicit string cast with potential data loss from '%s' to '%s';Exitfunción puede tomar un parámetro que especifique un resultado;resourcestringscomo Widestrings;TObjecttiene un puntero oculto adicionalTMonitorademás de su puntero VMT;deprecatedpalabra clave ahora puede tener texto adicionalDelphi 2007
Tenga en cuenta que Delphi 2007 es una versión ininterrumpida, las DCU de D2006 funcionarán sin cambios en D2007 ;
Delphi 2006
staticmétodos y propiedades;strictpalabra clave de visibilidad privada / protegida ;finalpalabra clave para métodos virtuales;{$METHODINFO}directiva;Delphi 2005
for ... inbuclesinlinepalabra clave{$REGION}/{$ENDREGION}directivasDelphi 7
{$WARN UNSAFE_CODE ON}TFormatSettingsestructura.Delphi 6
[TCustomVariantType][68]proporciona una sobrecarga del operador para tipos de variantes personalizadas{$IFDEF MSWINDOWS}{$IFDEF LINUX}{$LIBPREFIX}{$LIBSUFFIX}{$LIBVERSION}{$MESSAGE 'message'}{$SetPEFlags}{$IF}{$ELSE}directivas de compiladorexperimental,deprecated,library,platform(pero sin texto adicional para desuso)OLEVariant{$J+})varargsfunciones externas (pero solo para lacdeclconvención de llamada)Delphi 5
No hay nuevas funciones de idioma, pero:
Delphi 4
LongWordyInt64;Cardinales un UINT32 (antes era un valor de 31 bits sin firmar)Realtoma 8 bytes y es lo mismo quedouble(anteriormente era de 6 bytes);{$REALCOMPATIBILITY ON}directiva del compilador;REAL48reemplaza el antiguo de 6 bytesreal;resourcestrings{$EXTERNALSYM}y{$NODEFINE}directivasimplementspalabra clave para propiedadesDelphi 3
truecomo en-1lugar de 1 (el booleano no se modifica)packages.outparámetros.Widestringinterfacey compatibilidad condispinterfacepalabras clave y COM (dispid).Delphi 2
Ansistringreemplazashortstringcomo el tipo de cadena predeterminadoCurrencyVariant(para interoperabilidad con automatización OLE).ThreadVarpalabra clave.packedpalabra clave anula este comportamiento;1899/12/30D1 comenzó en0000/00/00finalizationpalabra claveregisterystdcallconvenciones de llamadas agregadas.packedpalabra clave.fuente
$LIBPREFIXet al. directivas están ahí al menos desde D7 (sospecho que D6, ya que están relacionadas con Kylix)Solo para complementar la respuesta de Johan, consulte esta entrada en mi blog
List of changes between versions of Delphi (Since Delphi 5)y la excelente páginaThe TIndexque enumera la mayoría de las nuevas características desde delphi 2005 y los recursos sobre cada una.fuente
El archivo jedi.inc utilizado por el proyecto Dephi JEDI expone una serie de características definidas. Si su proyecto es compatible con MPL, incluso podría usarlo para la detección de características y ahorrarse la molestia de reinventar esa rueda en particular.
Por ejemplo, define
SUPPORTS_FOR_INsi el compilador admite enumeradores. Uno podría envolver su código de enumerador en unaIFDEFverificación de esa definición en lugar de verificar una versión particular del compilador.fuente
jedi.incal menos es exacto, mientras que la lista de Johan necesita algunas verificaciones.