Avant de commencer, je voudrais souligner que j'ai honnêtement et véritablement cherché à plusieurs reprises et de manière exhaustive via Google pour une telle chose, et que je n'ai pas pu en trouver un.
J'ai besoin (pour un projet que je suis en train de développer) d'une liste de tous les Delphi (de 2007 à la toute dernière version publiée, je ne supporte plus aucune version antérieure à 2007) "Fonctionnalités de langage", et les versions dans lesquelles elles ont été introduites et ( le cas échéant) obsolète, amélioré ou supprimé.
J'ai déjà noté des questions similaires à celle-ci sur Stack Overflow, bien que la plupart d'entre elles aient été formulées sous la forme "quelle fonctionnalité est la meilleure" et clôturées comme jugées inappropriées.
Si quelqu'un connaît une telle liste (ou a suffisamment de temps libre pour en compiler une), je lui en serais très reconnaissant.
La réponse acceptée contiendra soit un lien vers une telle liste, soit la liste elle-même.
Notez que cette réponse ne répertorie que les nouvelles fonctionnalités langue
pas nouvelles fonctionnalités VCL/FMX.
Voici les liens vers le doc RAD Studio docwiki:
La liste complète d'Embarcadero: Quoi de neuf
Voir aussi: liste de David I
Résumer:
Delphi 10.3.x, 10.4 (pas encore sorti, c'est spéculatif)
@
N'est autorisée que lors de la conversion en dur du tableau.[weak]
, [unsafe]
Et [volatile]
sont pris en charge sur tous les compilateurs.Nouvelles routines intrinsèques du compilateur (non documentées):
function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;
Les nouvelles conditions suivantes sont introduites/activées dans XE4:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
PROCHAINE GÉNÉRATION
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF
dependency
pour spécifier les dépendances d'une bibliothèque externe (non documentée jusqu'à XE8).$IF
Ne pouvaient se terminer qu'avec $IFEND
, et les $IFDEF
, $IFNDEF
, $IFOPT
Ne pouvaient se terminer qu'avec $ENDIF
.Chez XE4, cela a changé de sorte que $ ENDIF est devenu un terminateur accepté pour $ IF, $ IFDEF, $ IFNDEF et $ IFOPT.
AtomicExchange()
, AtomicIncrement()
, AtomicCmpExchange()
, AtomicDecrement()
Packed
Force désormais l'alignement d'octets des enregistrements (Avant XE2, il ne faisait pas nécessairement cela)Huit nouveaux DEFINE ont été ajoutés:
ALIGN_STACK
CPUX86
CPUX64
MACOS (système d'exploitation Mac)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
WIN64
uses
.{$ExcessPrecision on/off}
(x64 uniquement){$STRINGCHECKS}
Est ignorée dans XE;{$ALIGN}
: Les valeurs acceptables pour la directive {$ALIGN}
Incluent désormais 1, 2, 4, 8 et 16.{$CODEALIGN}
, cela définit l'adresse de départ d'une procédure ou d'une fonction.{$STRONGLINKTYPES ON}
as
peut être utilisé pour reconstituer une référence d'interface à l'objet à partir duquel elle a été extraite.is
peut être utilisé pour vérifier si une référence d'interface a été extraite d'une certaine classe.TObject(SomeInterface)
.delayed
indique qu'une bibliothèque externe telle qu'une DLL ne doit pas être chargée au moment de la déclaration mais doit attendre le premier appel à la méthodestring
correspond maintenant à UnicodeString
;{$HighCharUnicode on|off}
Directive du compilateurfunction Default(T): T
fonction intrinsèque (non documentée){$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'
;Exit
peut prendre un paramètre spécifiant un résultat;resourcestrings
comme Widestrings;TObject
a un pointeur caché supplémentaire vers TMonitor
en plus de son pointeur VMT;deprecated
peut désormais contenir du texte supplémentairestatic
méthodes et propriétés;strict
mot-clé de visibilité privé/protégé ;final
mot-clé pour les méthodes virtuelles;{$METHODINFO}
;for ... in
Boucles,inline
mot clé{$REGION}
/{$ENDREGION}
Directives{$WARN UNSAFE_CODE ON}
TFormatSettings
.[TCustomVariantType][68]
Fournit surcharge de l'opérateur pour les types de variantes personnalisés{$IFDEF MSWINDOWS}
{$IFDEF LINUX}
{$LIBPREFIX}
{$LIBSUFFIX}
{$LIBVERSION}
{$MESSAGE 'message'}
{$SetPEFlags}
{$IF}{$ELSE}
experimental
, deprecated
, library
, platform
(mais sans texte supplémentaire pour obsolète)OLEVariant
{$J+}
)varargs
fonctions externes (mais uniquement pour la convention d'appel cdecl
)Pas de nouvelles fonctionnalités linguistiques, mais:
LongWord
et Int64
; Cardinal
est un UINT32 (avant sa valeur 31 bits non signée)Real
prend 8 octets et est identique à double
(auparavant il était de 6 octets); {$REALCOMPATIBILITY ON}
;REAL48
Remplace l'ancien 6 octets real
;resourcestrings
{$EXTERNALSYM}
Et {$NODEFINE}
implements
mot clé pour les propriétéstrue
sous -1
Au lieu de 1 (le booléen est inchangé)packages
.out
paramètres.Widestring
interface
et dispinterface
mot clé et prise en charge COM (dispid
).Ansistring
remplace shortstring
comme type de chaîne par défautCurrency
Variant
(pour interop avec OLE automation).ThreadVar
.packed
remplace ce comportement;1899/12/30
sous D1, il a commencé à 0000/00/00
finalization
register
et stdcall
conventions d'appel ajoutées.packed
mot clé.Juste pour compléter la réponse de Johan vérifiez cette entrée sur mon blog List of changes between versions of Delphi (Since Delphi 5)
et l'excellente page The TIndex
qui répertorie la plupart des nouvelles fonctionnalités depuis delphi 2005 et des ressources sur chacune d'elles.
Le fichier jedi.inc utilisé par le projet Dephi JEDI expose une série de définitions de fonctionnalités. Si votre projet est compatible MPL, vous pouvez même l'utiliser pour la détection de fonctionnalités et vous épargner la peine de réinventer cette roue particulière.
Par exemple, il définit SUPPORTS_FOR_IN
si le compilateur prend en charge les énumérateurs. On pourrait envelopper votre code énumérateur dans un IFDEF
en vérifiant cette définition plutôt qu'en vérifiant une version particulière du compilateur.