À regarderun correctif ou une fonctionnalité utileLe payload brut ne contient aucun marqueur superseded_by ni avis de dépréciation. La réécriture de GetExtended concerne l’implémentation Pascal utilisée hors WIN32DELPHI ; Delphi Win32 conserve son implémentation assembleur x87 distincte. Les affirmations de performance reposent sur la structure du code et l’intention des commits, non sur des benchmarks présents dans le payload.
Les parseurs numériques Pascal sont réécrits autour de chemins entiers plus rapides
Les implémentations Pascal derrière GetExtended et GetNumericVariantFromJson maintiennent désormais les entiers courants et les décimaux courts dans des boucles plus resserrées, tout en conservant des contrôles pour les longues mantisses, les exposants et les limites Int64. Les tests GetExtended rendent aussi explicites la normalisation du signe de zéro et plusieurs fractions de 18 à 20 chiffres. Aucune migration de signature n’est requise, mais les applications dépendant du type numérique exact des variants ou de cas limites flottants doivent valider la build 2.4.16865.
En bref
- Passez à la build 2.4.16865 et retestez les conversions numériques qui dépendent du type variant exact ou de l’arrondi aux limites.
- Le chemin Pascal hors Win32 de GetExtended a été simplifié deux fois, avec des boucles distinctes pour les 18 premiers chiffres, la suite contrôlée contre les débordements, les fractions et les exposants.
- GetExtended normalise maintenant volontairement -0 et -0e400 en zéro numérique sur son chemin Pascal, conformément au comportement fixé par les nouveaux tests.
- GetNumericVariantFromJson déroule ses premiers chiffres et réécrit la sélection Int64, Currency et Double sans modifier sa signature publique.
- mormot.core.base ajoute la constante publique MIN_INT64 et le membre overlay TSynVarData.VPtrInt.
Conseil de mise à jour
Prenez la build 2.4.16865 comme séquence complète des parseurs. Le payload brut n’identifie aucune plage intermédiaire cassée, mais les quatre commits sont étroitement liés : le parseur JSON final utilise MIN_INT64 ajouté juste avant. Relancez les tests pour -0, les extrêmes Int64, les longues mantisses décimales, les valeurs Currency jusqu’à quatre décimales, la notation scientifique et les nombres JSON invalides sur chaque backend Delphi et FPC livré.
4 sur 4 entrées · 4 commits upstream
1
Moyenne
Les variants numériques JSON reçoivent un parseur déroulé des chiffres courants
GetNumericVariantFromJson déroule maintenant l’accumulation initiale des chiffres, traite les suivants par paires et dans des boucles contrôlées contre les débordements, gère MIN_INT64 avec une sentinelle explicite et sépare la validation des fractions et exposants. La phase de résultat est réécrite autour de magnitudes positives pour varInteger, varInt64, varCurrency et varDouble, y compris l’initialisation de zéro de taille pointeur via TSynVarData.VPtrInt.
Performance
mormot.core.variants
c88c4ad7+170-93
core: rewritten GetNumericVariantFromJson()
Impact
Tous les appelants Delphi et FPC de la fonction publique utilisent la nouvelle implémentation Pascal. La signature et la grammaire JSON acceptée ne changent pas dans le diff, mais le code choisissant le stockage exact integer, Currency ou Double a été largement remplacé ; les consommateurs inspectant TVarData.VType doivent retester des limites représentatives. Le payload ne contient aucun résultat de benchmark.
À regarder
Testez le VType et la valeur renvoyés autour des limites 32 bits, Int64 et Currency, ainsi que les longues mantisses et les formes d’exposant signées.
Unités
2
Moyenne
GetExtended réduit le travail des chemins courants entiers et décimaux
Le parseur GetExtended hors WIN32DELPHI remplace plusieurs compteurs signés et valeurs flottantes temporaires par un traitement des chiffres en PtrUInt, renvoie directement les entiers et zéro, et regroupe la mise à l’échelle par puissances de dix en moins d’opérations. Son contrôle NAN/INF lit maintenant un préfixe de deux octets avant de vérifier le troisième caractère. Le même commit documente pourquoi le parseur numérique JSON divise par des puissances exactes pour les exposants négatifs courts.
Performance
mormot.core.text+1
700177da+64-74
core: slightly optimized GetExtended() code
Impact
Les builds FPC et Delphi hors Win32 utilisent le chemin Pascal simplifié ; Delphi Win32 continue d’utiliser son implémentation assembleur x87. Les signatures publiques restent inchangées. Le chemin direct de zéro normalise le zéro négatif, comportement rendu explicite par les tests du commit suivant.
À regarder
Incluez le zéro signé et des limites d’exposant représentatives dans les tests de régression du parseur avant la mise à niveau.
API publique
GetExtendedbehaviour-changed — Le chemin Pascal normalise -0 et zéro avec exposant en zéro numérique ; les signatures ne changent pas.
3
Moyenne
GetExtended sépare les chiffres rapides du parsing protégé contre les débordements
L’implémentation Pascal de GetExtended est de nouveau réécrite : les 18 premiers chiffres entiers sont accumulés sans contrôle de débordement, les suivants utilisent une boucle protégée, les chiffres significatifs excédentaires sont ignorés tout en conservant leur position décimale, et la syntaxe des fractions et exposants dispose de validations dédiées. Les tests ajoutent de longues fractions aux limites, les entrées invalides -e1 et .e2, ainsi que la normalisation attendue de -0e400.
Performance
mormot.core.text
71129606+66-33
core: rewritten GetExtended() pascal
Impact
Il s’agit de l’implémentation GetExtended finale de l’édition, avec une couverture de régression élargie autour de 18 à 20 chiffres significatifs. Elle affecte les performances et résultats limites du parsing FPC et Delphi hors Win32 ; Delphi Win32 conserve son chemin assembleur. Aucun changement de source appelante n’est requis.
À regarder
Relancez les tests de conversion bit à bit pour les longues mantisses, les subnormaux et les limites d’exposant sur les cibles hors Win32.
Unités
4
Faible
MIN_INT64 et un overlay variant de taille pointeur deviennent publics
mormot.core.base ajoute MIN_INT64 à côté de MAX_INT64 et VPtrInt dans la branche varOleInt de TSynVarData. TRestStorageInMemory.FindMax utilise la constante nommée au lieu de low(Int64), et un commentaire GetExtended explique pourquoi sa boucle Pascal n’est pas déroulée comme celle du parseur JSON.
Nouveautés
mormot.core.base+2
e5746e2f+7-4
core: minor refactoring including new MIN_INT64 constant
Impact
Le comportement ORM existant ne change pas. Le code de bibliothèque et d’application peut désormais utiliser un minimum signé 64 bits nommé et effacer ou accéder directement au stockage entier de taille pointeur de TSynVarData. Les ajouts suivent la largeur PtrInt sous Delphi et FPC.
API publique
MIN_INT64added — Constante publique égale à low(Int64).TSynVarData.VPtrIntadded — Vue entière de taille pointeur ajoutée à la branche overlay varOleInt.