Agir maintenantpeut affecter un système en productionLe payload brut ne contient aucun marqueur superseded_by ni avis de dépréciation. Ses trois commits de merge ne nécessitent pas d’entrée ; les 21 commits non-merge listés sont couverts. Les plages à éviter suivent les corrections ultérieures explicites des diffs intégrés et de la séquence de builds. Les améliorations de performance sont confirmées par la structure, mais le payload ne contient aucun benchmark comparatif chiffré.
Le parsing numérique SSSE3 arrive sous Delphi et FPC, avec des corrections de limites
Le changement principal est un chemin assembleur x86-64 partagé pour GetExtended et GetNumericVariantFromJson sur les cibles Delphi et FPC compatibles SSSE3, avec des fallbacks scalaires et une matrice de régression élargie. Des corrections ultérieures réparent le parsing de MIN_INT64 avec fraction et la cohérence FP80. Le reporting de version macOS prend aussi en charge Golden Gate, mais sa première correspondance de kernel est corrigée plus tard dans cette même édition ; les utilisateurs en production doivent donc viser la build 2.4.16897 plutôt qu’une build intermédiaire.
En bref
- Passez à la build 2.4.16897 ; la série assembleur numérique reçoit des corrections MIN_INT64 et FP80 avant le head final.
- GetExtended et GetNumericVariantFromJson utilisent désormais l’assembleur SSSE3 sur les cibles Delphi Win64 et FPC Win64/Linux x86-64 compatibles.
- La build 2.4.16888 corrige le parsing de -9223372036854775808.0 dans les chemins Pascal et assembleur x86-64.
- Le chemin FP80 dédié conserve la précision de mantisse 64 bits et la build 2.4.16891 harmonise les résultats signés hors plage.
- MacKernel et les métadonnées Golden Gate sont des ajouts publics ; les builds 2.4.16892–2.4.16895 utilisent une correspondance Darwin incorrecte corrigée en 16896.
- GetInteger et GetCardinal consomment maintenant deux chiffres par boucle sans changer leurs signatures publiques.
Conseil de mise à jour
Utilisez la build 2.4.16897 comme un ensemble. Ne vous arrêtez pas sur 2.4.16866–2.4.16890 : l’assembleur numérique fusionné et les chemins Pascal/FP80 reçoivent des corrections de limites et de cohérence jusqu’à 16891. Les déploiements macOS doivent aussi éviter 2.4.16892–2.4.16895, car le premier ajustement MacKernel mappe incorrectement les versions Darwin récentes jusqu’à 16896. Relancez les tests de type numérique JSON, Currency, minimum Int64, longues mantisses, débordement signé et FP80 sur chaque backend Delphi/FPC livré.
21 sur 21 entrées · 24 commits upstream
1
Élevée
Le parsing FP80 reçoit un chemin de précision dédié
Sous TSYNEXTENDED80, GetExtended applique l’échelle avec la mantisse complète de 64 bits au lieu du trimming propre au binary64, tandis que GetNumericVariantFromJson utilise des règles de division exacte et de plage adaptées à FP80 avant de renvoyer un variant Double.
Correctifs
mormot.core.text+1
a91f18f1+67-25
core: proper FP80 version of GetExtended() and GetNumericVariantFromJson()
Impact
Les cibles FPC et autres où TSynExtended=FP80 évitent les hypothèses binary64 pouvant modifier les bits faibles des longues mantisses ; les cibles binary64 conservent leur chemin spécialisé.
Mise à jour recommandée
Mettez à niveau jusqu’à la build 2.4.16891 et comparez les résultats FP80 exacts pour les longues mantisses et les exposants extrêmes.
2
Élevée
Le parsing numérique portable rejette les valeurs vides et préserve les décimales limites
GetExtended rejette un signe ou des espaces sans chiffre et supprime les zéros décimaux finaux neutres avant la conversion de Clinger ; GetNumericVariantFromJson corrige la gestion de zéro, MIN_INT64, du minimum Currency et des limites fractionnaires.
Correctifs
mormot.core.text+1
b9ba681e+59-9
core: fix empty numbers, padded decimals and negative fraction boundaries
Impact
Les chemins portables Delphi et FPC n’acceptent plus un texte numérique vide et ne perdent plus en exactitude sur les décimales complétées ; les variants numériques JSON conservent le type et la valeur attendus aux limites signées.
Mise à jour recommandée
Prenez la séquence complète 2.4.16897 et testez les entrées vides, les décimales complétées, le minimum Currency et les fractions Int64 négatives.
3
Élevée
MIN_INT64 avec un suffixe fractionnaire est correctement analysé
Les chemins Pascal et x86-64 de GetNumericVariantFromJson cessent d’accumuler les chiffres fractionnaires lorsque la sentinelle MIN_INT64 est définie, et la suite de régression ajoute -9223372036854775808.0.
Correctifs
mormot.core.base.asmx64+1
dfe52ae7+14-10
core: fixed GetNumericVariantFromJson('-9223372036854775808.0') parsing
Impact
Un JSON contenant le minimum signé 64 bits suivi de .0 ne corrompt plus le chemin de mantisse et ne renvoie plus une mauvaise valeur Double sous Delphi ou FPC.
Mise à jour recommandée
Ne vous arrêtez pas avant la build 2.4.16888 si le JSON externe peut contenir des formes décimales du minimum Int64.
4
Élevée
MacKernel ignore désormais Darwin 26 dans le bon sens
MacKernel remplace l’incrément des valeurs supérieures à 25 par un décrément des valeurs supérieures à 26, et les tests vérifient les valeurs MACOS_NUM et MACOS_NAME obtenues jusqu’aux fallbacks futurs.
Correctifs
mormot.core.os
944abc0c+13-10
core: fixed MacKernel() logic
Impact
Le reporting de macOS 26, 27 et 28 n’indexe plus incorrectement les tableaux de versions marketing. Cela affecte OSVersionName, OSVersionShort et les sorties de monitoring sous macOS.
Mise à jour recommandée
Utilisez la build 2.4.16896 ou ultérieure pour le reporting de version macOS.
API publique
MacKernelbehaviour-changed — Les versions Darwin supérieures à 26 sont maintenant mappées en décrémentant le slot kernel absent.
Unités
5
Moyenne
Les erreurs de plage FP80 préservent le signe analysé
Lorsque le chemin FP80 dédié de GetExtended rejette une magnitude d’exposant supérieure ou égale à 5120, il applique maintenant fNeg au résultat partiel avant de renvoyer l’erreur.
Correctifs
mormot.core.text
92faab04+5-3
core: ensure GetExtended() FP80 is consistent
Impact
Les chemins FP80 et binary64 s’accordent maintenant sur le signe de la valeur partielle renvoyée avec une erreur hors plage ; cela concerne surtout les appelants permissifs ou de diagnostic qui inspectent la valeur malgré err=1.
Mise à jour recommandée
Passez à la build 2.4.16891 ou ultérieure si les appelants inspectent les résultats FP80 partiels en cas d’erreur de parsing.
Unités
6
Moyenne
Le reporting macOS Golden Gate est ajouté derrière MacKernel
MACOS_NUM et MACOS_NAME sont étendus jusqu’à Golden Gate, et une nouvelle fonction publique MacKernel centralise la correspondance de Darwin utsrelease[2] vers ces tableaux pour OSVersionName et OSVersionShort.
Nouveautés
mormot.core.os+1
3e5e799c+33-21
core: properly detect MacOS Golden Gate
Impact
Les services et outils de monitoring macOS peuvent afficher Golden Gate par son nom marketing, mais cette première correspondance est incorrecte pour les nouvelles valeurs Darwin et doit être associée à la build 16896.
Mise à jour recommandée
Ne déployez pas ce changement sans la correction MacKernel de la build 2.4.16896.
API publique
MacKerneladded — Helper public mappant TOperatingSystemVersion.utsrelease[2] vers un index MACOS_NAME.MACOS_NUMbehaviour-changed — La borne supérieure passe à 27 et ajoute macOS 28 après Golden Gate.MACOS_NAMEbehaviour-changed — La borne supérieure passe à 27 avec Golden Gate puis un fallback Next.
7
Moyenne
X64CpuFeatures expose la disponibilité de SSSE3
L’ensemble public TX64CpuFeatures reçoit cpuSSSE3 avant cpuAVX, et l’initialisation l’inclut lorsque cfSSE3 et cfSSSE3 sont tous deux présents.
Nouveautés
mormot.core.base
73b03207+6-3
core: new cpuSSSE3 flag in X64CpuFeatures
Impact
Le code peut sélectionner spécifiquement SSSE3, mais l’ajout du premier membre d’énumération décale les ordinaux et positions de bits de cpuAVX, cpuAVX2 et cpuHaswell dans les masques bruts persistés.
À regarder
Recherchez les valeurs Ord(TX64CpuFeature) persistées ou les bitmasks TX64CpuFeatures sérialisés avant la mise à niveau.
API publique
TX64CpuFeature.cpuSSSE3added — Ajouté comme premier bit TX64CpuFeatures avant cpuAVX.
Unités
8
Moyenne
Les entrées numériques longues et rares restent dans l’assembleur
L’implémentation x86-64 ajoute une continuation assembleur scalaire pour les longues mantisses, les exposants et les CPU sans SSSE3, et partage une table NumericSimdData explicitement alignée entre les deux parseurs.
Performance
mormot.core.text+1
af7922d5+831-280
core: keep numeric parsing in ASM and share aligned SSSE3 data
Impact
Davantage d’entrées x86-64 évitent une transition vers Pascal tout en conservant le curseur JSON, les erreurs, Currency et la sémantique d’arrondi. NumericSimdData devient un point de test publié sous ASMX64.
À regarder
Utilisez la build finale, car des commits ultérieurs refactorisent et corrigent ce nouveau chemin assembleur.
API publique
NumericSimdDataadded — Publié uniquement sous ASMX64 comme point d’entrée du stockage aligné utilisé par les tests du parseur.
9
Moyenne
Delphi Win64 reçoit un chemin rapide SSSE3 pour les nombres courants
GetExtended et GetNumericVariantFromJson reçoivent un assembleur Delphi Win64 qui réduit jusqu’à 15 chiffres avec SSSE3, vérifie les limites de page de 4 Kio et revient au Pascal pour les grammaires longues ou rares.
Performance
mormot.core.text+1
56417260+617-0
core: accelerate Delphi Win64 number parsing with SSSE3
Impact
Les CPU Delphi Win64 compatibles peuvent analyser les entiers, fractions et exposants courts courants avec moins d’opérations scalaires, tout en conservant les signatures publiques et le fallback Pascal.
À regarder
Mesurez et retestez la build finale sur le plus ancien CPU Win64 compatible SSSE3 que vous prenez en charge.
10
Moyenne
La mise à l’échelle flottante Pascal supprime du travail redondant
GetExtended simplifie la validation des exposants, l’indexation des puissances de dix et les tests du chemin de Clinger, et remplace les boucles répétées d’échelle FP80 par deux tables compactes de puissances.
Performance
mormot.core.text
af318893+74-57
core: optimized GetExtended() pascal code
Impact
Le parsing portable Delphi/FPC exécute moins de branches et d’opérations d’index ; les signatures publiques et la syntaxe acceptée ne changent pas.
Unités
11
Moyenne
Les entiers d’un ou deux chiffres contournent la réduction SIMD générale
L’assembleur x86-64 partagé réutilise les chiffres déjà calculés dans xmm0 pour les résultats entiers d’un ou deux chiffres de GetExtended et GetNumericVariantFromJson, avec des stockages dédiés pour le signe et varInteger.
Performance
mormot.core.base.asmx64
102fa3d9+43-11
core: optimized #582 asm for 1 and 2 digits
Impact
Les tokens numériques très courts utilisent moins d’instructions de shuffle et de multiplication sur le chemin assembleur x86-64 ; les tests confirment les valeurs varInteger exactes et les pointeurs de fin.
Unités
12
Moyenne
GetInteger et GetCardinal consomment les chiffres par paires
Les boucles portables GetInteger et GetCardinal analysent maintenant deux chiffres par itération lorsqu’ils sont disponibles, puis un dernier chiffre si nécessaire, sans changer les règles de signe ou de terminaison.
Performance
mormot.core.base
d1bf6356+35-15
core: rewritten GetInteger/GetCardinal
Impact
Les helpers JSON et texte Delphi/FPC qui appellent ces routines exécutent moins d’itérations ; les signatures et résultats documentés ne changent pas.
Unités
13
Moyenne
FPC Win64 et Linux rejoignent le chemin de parsing SSSE3
Le parseur x86-64 adapte le passage des arguments et la syntaxe d’alignement à FPC et à l’ABI System V, et ajoute un traitement assembleur sûr des NaN/Inf signés et des préfixes incomplets.
Compilateur & plateforme
mormot.core.text+1
9d219b99+100-26
core: support SSSE3 number parsing on FPC Win64 and Linux
Impact
Les builds FPC x86-64 sous Windows et Linux peuvent utiliser la même accélération SSSE3 sans modifier les appelants ; les entrées sans SSSE3 ou inhabituelles gardent un comportement de fallback équivalent.
À regarder
Exécutez la suite de conversions numériques sous FPC Win64 et Linux x86-64 avant déploiement.
14
Faible
Les builds BSD évitent les avertissements de conversion de zéro vers TThreadID
TMultiLightLock.Init, Done et UnLock convertissent explicitement zéro en TThreadID lors de la remise à zéro de ThreadID.
Compilateur & plateforme
mormot.core.os
9bffea66+5-5
core: fixed compilation warning on BSD
Impact
La compilation BSD/FPC est plus propre ; le comportement de verrouillage généré et les API publiques ne changent pas.
Unités
15
Faible
Les deux parseurs numériques x86-64 passent dans un include partagé
Les corps assembleur et constantes quittent mormot.core.text et mormot.core.variants pour mormot.core.base.asmx64.inc, tandis que les implémentations Pascal restent dans leurs unités d’origine.
Sous le capot
mormot.core.base+3
e86c5f33+1217-1203
core: moved #582 x86_64 asm to mormot.core.base.asmx64.inc
Impact
Aucun changement pour les appelants ; la consolidation supprime le code d’intégration dupliqué et centralise les corrections ultérieures pour Delphi et FPC x86-64.
16
Faible
L’assembleur GetExtended est réorganisé pour l’intégration FPC
L’assembleur x86-64 de GetExtended est réorganisé mécaniquement autour de labels, constantes et directives de compilateur partagés, sans changement fonctionnel prévu.
Sous le capot
mormot.core.text
b082ba10+380-381
core: refactored #582 x64 asm
Impact
Aucun changement d’API applicative ni de comportement n’est annoncé ; la réorganisation prépare une implémentation commune à Delphi et FPC.
Unités
17
Faible
L’assembleur numérique JSON est réorganisé pour FPC
L’assembleur GetNumericVariantFromJson est réorganisé pour une intégration compilateur plus propre, sans changement prévu du curseur, de VType, de la valeur ou des erreurs.
Sous le capot
mormot.core.text+1
2201a7b9+348-364
core: refactored GetNumericVariantFromJson() x64 asm
Impact
Le code applicatif ne voit aucun changement d’API publique ; il s’agit d’un travail interne avant le déplacement de l’implémentation vers un include partagé.
18
Faible
Les boucles par paires de chiffres sont simplifiées sans changement sémantique
GetInteger et GetCardinal remplacent les blocs else imbriqués par continue et un chemin partagé pour le dernier chiffre unique.
Sous le capot
mormot.core.base
8924ade8+10-14
core: minor GetInteger/GetCardinal refactoring
Impact
Aucun changement fonctionnel, d’API ou de comportement backend ; cela raccourcit seulement les boucles réécrites.
Unités
19
Faible
Les régressions numériques distinguent désormais FP80 de binary64
TTestCoreBase.NumericalConversions est réorganisé et enrichi de contrôles bit à bit propres aux backends pour TSynExtended, les variants JSON, Currency et les longues entrées décimales.
Tests
4fb42e12+110-66
tests: enhanced TTestCoreBase.NumericalConversions
Impact
Aucun changement d’API applicative ; les différences de précision propres aux backends sont maintenant testées explicitement au lieu de partager les attentes binary64.
20
Faible
Les tests de conversion numérique ajoutent des cas d’arrondi et de limites signées
TTestCoreBase.NumericalConversions ajoute des vérifications bit à bit pour l’arrondi décimal, les valeurs négatives et les entrées limites après le merge du parseur.
Tests
81fff99f+17-5
tests: some tests
Impact
Aucun changement de code applicatif ni d’API publique ; la suite élargie rend visibles les régressions du parseur selon les compilateurs.
21
Faible
Les limites kernel-vers-nom macOS reçoivent des tests directs
TTestCoreBase teste MacKernel autour des bornes basses, de Darwin 24–25, du slot 26 absent et des valeurs futures.
Tests
870336b8+16-2
test: cover OSX kernel number to Apple Corp marketing "logic"
Impact
Aucun changement de code applicatif ; les tests révèlent que la logique initiale d’offset mappe mal les nouvelles versions Darwin.