Liste des fonctionnalités du langage Delphi et de la version dans laquelle elles ont été introduites / obsolètes

114

Avant de commencer, je voudrais souligner que j'ai honnêtement et sincèrement cherché à plusieurs reprises et de manière exhaustive via Google une telle chose, et je n'ai pas pu en trouver.

J'ai besoin (pour un projet que je développe) d'une liste de tous les Delphi (2007 à la toute dernière version publiée, je ne supporte plus aucune version antérieure à 2007) "Fonctionnalités linguistiques", et les versions dans lesquelles elles ont été introduites et ( le cas échéant) obsolète, améliorée ou supprimée.

J'ai déjà noté des questions similaires à celles-ci sur Stack Overflow, bien que la plupart d'entre elles aient été formulées sous la forme "quelle fonctionnalité est la meilleure", et ont été fermées comme jugées inappropriées.

Si quelqu'un connaît une telle liste (ou a assez de temps libre pour en compiler une), je serais très reconnaissant.

La réponse acceptée contiendra soit un lien vers une telle liste, soit la liste elle-même.

LaKraven
la source
Q: Alors pourquoi avez-vous besoin d'une telle liste? Q: Essayez-vous de créer un jeu de codes (peut-être un composant ou une bibliothèque) qui prend en charge toutes les plates-formes entre BDS2007 et XE2 (c'est-à-dire n'utilise aucune fonctionnalité plus récente que BDS2007)? Q: Si oui, pourquoi ne pas simplement essayer de compiler sur 2007 et voir quelles pauses? (PS: j'utilise toujours volontiers BDS2006;)).
paulsm4
8
Simon vérifie cette question Liste variée des nouveautés en langage Delphi, RTL, VCL? , Aussi sur mon blog, je maintiens une liste
RRUZ
3
@ paulsm4 1) Je peux donc tenir compte des limitations de fonctionnalités entre les versions des bibliothèques publiques, 2) Oui (mais pas nécessairement une bibliothèque de composants), 3) Parce qu'il est plus facile de savoir à l'avance que de tester constamment sur différentes versions chaque aspect individuel d'une bibliothèque . Théoriquement, D2006 fonctionnerait bien, mais je ne vais pas le soutenir activement (sans offense).
LaKraven

Réponses:

159

Notez que cette réponse ne répertorie que les nouvelles fonctionnalités linguistiques et
non les nouvelles fonctionnalités VCL / FMX.

Voici les liens vers le docwiki de RAD Studio:

La liste complète d'Embarcadero: Quoi de neuf
Voir aussi: La liste de David I


Résumer:

Delphi 10.3.x, 10.4 (pas encore sorti, c'est spéculatif)

Delphi 10.3

  • Le compilateur Linux 64 bits n'utilise plus ARC , il utilise à la place le manuel géré par défaut, qui est le même que dans le compilateur Windows. Cela facilite grandement le portage du code de Windows ou OSX vers Linux.
  • Variables en ligne avec inférence de type automatique
  • Prise en charge d'AnsiChar / AnsiString 8 bits dans enable sur Linux.
  • C ++ Builder et Delphi utilisent désormais le même ABI pour tous les appels.

Delphi 10.2 Tokyo

Delphi 10.1 Berlin

Delphi 10 Seattle

  • Prise en charge d'Android 5.1.1 et iOS 8.4
  • Amélioration de la gestion des exceptions OSX

Delphi XE8

  • Prise en charge d'iOS 64 bits;
  • Nouveaux types d'entiers: FixedInt , FixedUInt Types d'entiers 32 bits sur toutes les plates-formes;
  • Nouveaux types d'entiers dépendants de la plate-forme: LongInt , LongWord (64 bits sur iOS-64, 32 bits sur toutes les autres plates-formes);

Delphi XE7

Delphi XE6

Delphi XE5

Delphi XE4

À XE4, cela a changé de sorte que $ ENDIF est devenu un terminateur accepté pour $ IF, $ IFDEF, $ IFNDEF et $ IFOPT.

Delphi XE3

Delphi XE2

Delphi XE

  • La {$STRINGCHECKS}directive du compilateur est ignorée dans XE;
  • Nouvelle valeur de 16 octets pour la {$ALIGN}directive: les valeurs acceptables pour la {$ALIGN}directive incluent désormais 1, 2, 4, 8 et 16.
  • nouvelle {$CODEALIGN}directive, cela définit l'adresse de départ d'une procédure ou d'une fonction.
  • La {$STRONGLINKTYPES ON}directive
  • Prise en charge des expressions régulières.

Delphi 2010

  • Enhanced Delphi RTTI (Run Time Type Information).
  • Les attributs
  • L' asopérateur peut être utilisé pour convertir une référence d'interface en l'objet dont elle a été extraite.
  • L' isopérateur peut être utilisé pour vérifier si une référence d'interface a été extraite d'une certaine classe.
  • Coulée dangereuse normale peut être effectuée sur une interface: TObject(SomeInterface).
  • La nouvelle delayeddirective 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éthode
  • Constructeur / Destructeur de classe

Delphi 2009

Delphi 2007

  • Aucun changement de langue à ma connaissance;
    Notez que Delphi 2007 est une version sans rupture, les DCU de D2006 fonctionneront sans changement dans D2007 ;
  • (La `` personnalité '' .NET de 2007 a introduit les génériques )

Delphi 2006

Delphi 2005

  • for ... in boucles,
  • inline mot-clé
  • Caractère générique dans l'instruction uses autorisé
  • types imbriqués
  • constantes imbriquées
  • {$REGION}/ {$ENDREGION}directives

Delphi 7

  • trois avertissements supplémentaires du compilateur:
    • Unsafe_Type,
    • Unsafe_Code et
    • Unsafe_Cast. Ces avertissements sont désactivés par défaut, mais peuvent être activés
  • nouvelle directive du compilateur {$WARN UNSAFE_CODE ON}
  • Surcharges de routines qui mettent en forme et analysent les nombres, les valeurs date-heure et la devise à l'aide d'une TFormatSettingsstructure.

Delphi 6

Delphi 5

Pas de nouvelles fonctionnalités linguistiques, mais:

Delphi 4

  • Tableaux dynamiques
  • LongWordet Int64; Cardinalest un UINT32 (avant qu'il ne soit une valeur 31 bits non signée)
  • Realprend 8 octets et est le même que double(auparavant, il était de 6 octets);
    • Remplacer par la nouvelle {$REALCOMPATIBILITY ON}directive du compilateur;
    • REAL48remplace l'ancien 6 octets real;
  • Soutien resourcestrings
  • Surcharge de méthode
  • Paramètres par défaut
  • {$EXTERNALSYM}et {$NODEFINE}directives
  • implementsmot-clé pour les propriétés

Delphi 3

  • Wordbool, longbool et bytebool stockent trueau -1lieu de 1 (Boolean est inchangé)
  • Les composants doivent être installés à l'aide de packages.
  • Assertions.
  • out paramètres.
  • Widestring
  • interfaceet prise en charge des dispinterfacemots clés et COM ( dispid).

Delphi 2

  • Prise en charge de 32 bits;
  • Ansistringremplace shortstringcomme type de chaîne par défaut
  • Currency
  • Variant (pour l'interopérabilité avec l'automatisation OLE).
  • Prise en charge des threads et ThreadVarmot - clé.
  • Les données de 4 octets sont alignées sur 4 octets. Le nouveau packedmot-clé remplace ce comportement;
  • TDateTime commence à 1899/12/30 sous D1, il a commencé à0000/00/00
  • nouveau finalizationmot-clé
  • registeret stdcallles conventions d'appel ajoutées.
  • packed mot-clé.
Johan
la source
Ah merveilleux! Je n'ai pas trouvé de moyen pour que Docwiki me montre des pages spécifiques aux anciennes versions de Delphi (pré XE2) ... je ne sais pas pourquoi! C'est merveilleux et a été marqué comme la bonne réponse! Merci!
LaKraven
@DavidHeffernan Il est utile d'avoir les nouvelles fonctionnalités en 2007 puisque cela définit la ligne de base ... dans un sens, je saurai avec certitude si une partie de ce que je produis pourrait peut - être fonctionner dans des versions antérieures (même si j'ai moi-même aucune intention de le soutenir)
LaKraven
9
Sur mon blog, je garde une liste
RRUZ
3
Holy Crap DELAYED, c'est génial! Pourquoi ne vous donnent-ils pas cette liste lors de la mise à niveau!
Peter Turner
1
Ce n'est pas exact. $LIBPREFIXet autres directives sont là au moins depuis D7 (je soupçonne D6, puisqu'elles sont liées à Kylix)
Free Consulting
16

Juste pour compléter la réponse de Johan, consultez cette entrée sur mon blog List of changes between versions of Delphi (Since Delphi 5)et l'excellente page The TIndexqui répertorie la plupart des nouvelles fonctionnalités depuis Delphi 2005 et des ressources sur chacune d'elles.

RRUZ
la source
Il y a quelque temps, un autre site delphi delphi3000 a été marqué comme dangereux pour certains antivirus.
RRUZ
2
Je suis le propriétaire de The TIndex et je peux confirmer qu'il s'agit d'un faux positif.
LachlanG
7

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 éviter de réinventer cette roue particulière.

Par exemple, il définit SUPPORTS_FOR_INsi le compilateur prend en charge les énumérateurs. On pourrait envelopper votre code d'énumérateur dans une IFDEFvérification de cette définition plutôt que de vérifier une version particulière du compilateur.

afrazier
la source
Oui, cette inclusion est certainement utile, mais elle n'a pas l'exhaustivité d'une liste détaillée (d'où cette question). Merci pour la suggestion ... considérez la réponse acceptée à cette question comme une amélioration des informations fournies par jedi.inc :)
LaKraven
1
@LaKraven: C'est vrai, il y a beaucoup de choses qu'il n'obtient pas, mais pour certains, cela peut suffire. Il a également l'avantage d'être déjà fait. :-) Personnellement, je pense que l'aplatissement des hiérarchies de la VCL, la suppression des en-têtes de copyright, et les jeter tous dans un référentiel de contrôle de version pourrait également être pratique. De cette façon, vous pouvez voir quand des fonctionnalités RTL / VCL particulières ont été implémentées.
afrazier
@LaKraven, je crois ce qui est jedi.incau moins exact, alors que la liste de Johan a besoin de quelques vérifications.
Consultation gratuite