Parmi les nombreux domaines de Delphi améliorés dans la version 10.4, il y a la bibliothèque d'exécution, qui bénéficiera de nombreuses améliorations en termes de qualité et de performances.
La bibliothèque d'exécution de Delphi est l'un des fondements du produit, car les bibliothèques d'interface utilisateur telles que VCL et FireMonkey, ainsi que les bibliothèques d'accès aux bases de données et de nombreux composants tiers répondent à la RTL de base. C'est pourquoi les changements apportés à la RTL sont particulièrement importants, car ils ont tendance à affecter tous les développeurs. Voici quelques changements clés qui sont sur le point d'être disponibles.
Fonctions de comptage de bits Standard
Nous avons introduit de nouvelles fonctions standard pour les opérations courantes de traitement des bits de bas niveau, énumérées ci-dessous.
- Compter les zéros non significatifs: Compte le nombre de bits de zéro précédant le bit de poids fort du paramètre X. Si X est zéro, il renvoie la largeur du bit, c'est-à-dire 32 pour CountLeadingZeros32 et 64 pour CountLeadingZeros64.
- Compter les zéros de fin: Compte le nombre de bits de zéro qui suivent le bit de poids faible du paramètre X. Si X est zéro, il renvoie la largeur du bit, c'est-à-dire 32 pour CountTrailingZeros32 et 64 pour CountTrailingZeros64.
- Nombre de personnes Population: Compte le nombre de 1 du paramètre X. La valeur de retour sera comprise entre 0 et la largeur de bit, c'est-à-dire 32 pour CountPopulation32 et 64 pour CountPopulation64.
Fonctionnalités supplémentaires pour les classes classiques
- La classe TCustomIniFile possède deux méthodes WriteInt64 et ReadInt64.
- Le type TGUID dispose d'une nouvelle méthode IsEmpty
- La propriété Items de la classe TJSONArray est désormais une propriété de tableau par défaut, ce qui permet d'écrire myJArray[2] plutôt que myJArray.Items[2].
Meilleure mise en mémoire tampon des flux
La fonction CopyFrom de la classe TStream de base disposait auparavant d'un tampon constant fixe pour la copie des données (fixé à 60K). Cela peut s'avérer très inefficace pour la copie de flux volumineux. La nouvelle valeur par défaut est de 1 Mo, mais la méthode dispose d'un paramètre supplémentaire que vous pouvez utiliser pour fournir une taille de tampon spécifique en fonction de l'opération de copie que vous effectuez (flux source et flux cible). La nouvelle signature de la méthode est
// classe TStream function CopyFrom(const Source : TStream ; Count : Int64 = 0 ; BufferSize : Integer = $100000) : Int64 ;
Optimisation des performances
- Optimisation de la lecture JSON : TJSONReader est maintenant 50% plus rapide
- Optimisation de l'assignation d'une StringList triée à une autre StringList
- Les améliorations de la performance du RTTI sont les suivantes :
- TRttiMethod.Invoke est ~ 4 fois plus rapide
- L'invocation de TVirtualInterface est ~ 1,7 fois plus rapide
- Les méthodes TRttiType.GetXxxx(AName) sont ~ 10 fois plus rapides
- Pour TValue, plusieurs opérations sont plus rapides
- L'opération QuickSort dans System.Classes est désormais plus efficace
FreeAndNil
Nous avons mis à jour la signature de la procédure FreeAndNil, afin d'éviter son utilisation avec des références d'interface et d'autres types de données non pris en charge. Elle est désormais déclarée comme nécessitant une référence à un TObject :
procedure FreeAndNil(const [ref] Obj : TObject) ; inline ;
Cela signifie qu'une utilisation incorrecte de FreeAndNil provoquera désormais une erreur de compilation. Dans le passé, une utilisation incorrecte n'était pas détectée, ce qui entraînait des bogues difficiles à résoudre. Notez que bien que le paramètre soit déclaré comme const, la variable par référence est effectivement modifiée.
Caractéristiques supplémentaires
- Nous avons supprimé certaines dépendances qui empêchaient certaines applications de la console de fonctionner sur Windows Server Core.
- La méthode TStringHelper.GetHashCode a été mise à jour pour ne pas mettre en majuscules la chaîne avant de la hacher, afin que son résultat corresponde à d'autres opérations internes comme la classe TStringComparer.
Ce n'est qu'une anticipation partielle. Nous avons également beaucoup travaillé sur la bibliothèque de programmation parallèle, AppTethering, les bibliothèques client REST et HTTP et d'autres sous-systèmes Delphi RTL. Nous espérons que ces améliorations, même si elles sont relativement mineures, seront appréciées pour leur impact positif sur le travail quotidien des développeurs de Delphi.
Il s'agit d'un aperçu d'une version à venir de RAD Studio. Il peut toujours y avoir des bogues ou des changements de dernière minute. Rien n'est définitif tant que la version n'est pas officiellement disponible.

