Требует действийможет затронуть работающую системуВ исходном payload нет отметок superseded_by и уведомлений о deprecation. Три merge commits не требуют entries; покрыты все 21 перечисленных non-merge commits. Диапазоны исключения основаны на явных последующих исправлениях во встроенных diffs и последовательности builds. Улучшения производительности подтверждаются структурой, но сравнительных benchmark numbers в payload нет.
SSSE3-парсинг чисел появился в Delphi и FPC вместе с исправлениями границ
Главное изменение — общий x86-64 assembly-путь для GetExtended и GetNumericVariantFromJson на целях Delphi и FPC с SSSE3, со scalar fallback и расширенной матрицей regression tests. Последующие commits исправляют parsing MIN_INT64 с дробью и согласованность FP80. В отчёт о версии macOS добавлен Golden Gate, но первая версия сопоставления kernel исправлена позднее в том же выпуске, поэтому production следует переходить на build 2.4.16897, а не на промежуточную build.
Коротко
- Переходите на build 2.4.16897; до финального head серия numeric assembly получает исправления MIN_INT64 и FP80.
- GetExtended и GetNumericVariantFromJson теперь используют SSSE3 assembly на поддерживаемых целях Delphi Win64 и FPC Win64/Linux x86-64.
- Build 2.4.16888 исправляет parsing -9223372036854775808.0 в путях Pascal и x86-64 assembly.
- Отдельный путь FP80 сохраняет 64-битную точность мантиссы, а build 2.4.16891 согласует signed результаты вне диапазона.
- MacKernel и metadata Golden Gate — публичные добавления; builds 2.4.16892–2.4.16895 используют неверное сопоставление Darwin, исправленное в 16896.
- GetInteger и GetCardinal теперь обрабатывают две цифры за цикл без изменения публичных signatures.
Рекомендации по обновлению
Берите build 2.4.16897 целиком. Не останавливайтесь на 2.4.16866–2.4.16890: объединённые numeric assembly и пути Pascal/FP80 получают исправления границ и согласованности вплоть до 16891. Для macOS также следует пропустить 2.4.16892–2.4.16895, поскольку первая корректировка MacKernel неверно сопоставляет новые Darwin releases до исправления в 16896. Повторите тесты JSON numeric type, Currency, минимума Int64, длинных мантисс, signed overflow и FP80 на каждом поставляемом backend Delphi/FPC.
21 из 21 записей · 24 коммитов в апстриме
1
Высокий
FP80 parsing получил отдельный путь точности
Под TSYNEXTENDED80 GetExtended масштабирует с полной 64-битной мантиссой вместо binary64 trimming, а GetNumericVariantFromJson применяет FP80-aware правила точного деления и диапазона перед возвратом variant Double.
Исправления
mormot.core.text+1
a91f18f1+67-25
core: proper FP80 version of GetExtended() and GetNumericVariantFromJson()
Влияние
FPC и другие цели с TSynExtended=FP80 избегают предположений binary64, способных менять младшие биты длинных мантисс; цели binary64 сохраняют специализированный путь.
Рекомендуется обновиться
Обновитесь как минимум до build 2.4.16891 и сравните точные результаты FP80 для длинных мантисс и крайних экспонент.
2
Высокий
Переносимый numeric parsing отклоняет пустые значения и сохраняет граничные дроби
GetExtended отклоняет знак или пробелы без цифр и удаляет безвредные конечные десятичные нули перед преобразованием Clinger; GetNumericVariantFromJson исправляет обработку нуля, MIN_INT64, минимума Currency и границ дроби.
Исправления
mormot.core.text+1
b9ba681e+59-9
core: fix empty numbers, padded decimals and negative fraction boundaries
Влияние
Переносимые пути Delphi и FPC больше не принимают пустой числовой текст и не теряют точность на дробях с конечными нулями; JSON numeric variants сохраняют ожидаемые тип и значение на signed границах.
Рекомендуется обновиться
Берите полную последовательность 2.4.16897 и проверьте пустой ввод, дроби с нулями, минимум Currency и отрицательные дроби Int64.
3
Высокий
MIN_INT64 с дробным суффиксом разбирается правильно
Пути Pascal и x86-64 GetNumericVariantFromJson прекращают накапливать дробные цифры после установки sentinel MIN_INT64; в regression suite добавлено -9223372036854775808.0.
Исправления
mormot.core.base.asmx64+1
dfe52ae7+14-10
core: fixed GetNumericVariantFromJson('-9223372036854775808.0') parsing
Влияние
JSON со signed 64-bit минимумом и .0 больше не повреждает путь мантиссы и не возвращает неверный Double на Delphi или FPC.
Рекомендуется обновиться
Не останавливайтесь до build 2.4.16888, если внешний JSON может содержать десятичные формы минимума Int64.
4
Высокий
MacKernel теперь правильно пропускает Darwin 26
MacKernel заменяет увеличение значений выше 25 на уменьшение значений выше 26; тесты проверяют итоговые MACOS_NUM и MACOS_NAME вплоть до будущих fallback.
Исправления
mormot.core.os
944abc0c+13-10
core: fixed MacKernel() logic
Влияние
Отчёт о macOS 26, 27 и 28 больше не использует неверные индексы массивов marketing version. Это влияет на OSVersionName, OSVersionShort и monitoring output на macOS.
Рекомендуется обновиться
Для отчёта о версии macOS используйте build 2.4.16896 или новее.
Публичный API
MacKernelbehaviour-changed — Darwin releases выше 26 теперь сопоставляются с вычитанием одного пропущенного kernel slot.
Модули
5
Средний
Ошибки диапазона FP80 сохраняют разобранный знак
Когда отдельный FP80-путь GetExtended отклоняет модуль экспоненты 5120 или больше, он теперь применяет fNeg к частичному результату перед возвратом ошибки.
Исправления
mormot.core.text
92faab04+5-3
core: ensure GetExtended() FP80 is consistent
Влияние
Пути FP80 и binary64 теперь согласованы по знаку частичного значения при ошибке диапазона; это главным образом влияет на диагностические или permissive callers, читающие значение при err=1.
Рекомендуется обновиться
Обновитесь до build 2.4.16891 или новее, если вызывающий код проверяет частичные результаты FP80 при ошибках parsing.
Модули
6
Средний
Отчёт о macOS Golden Gate добавлен через MacKernel
MACOS_NUM и MACOS_NAME расширены до Golden Gate, а новая публичная функция MacKernel централизует сопоставление Darwin utsrelease[2] с этими массивами для OSVersionName и OSVersionShort.
Новые возможности
mormot.core.os+1
3e5e799c+33-21
core: properly detect MacOS Golden Gate
Влияние
Сервисы и monitoring macOS могут показывать Golden Gate по marketing name, но первая версия сопоставления неверна для новых значений Darwin и должна использоваться вместе с build 16896.
Рекомендуется обновиться
Не развёртывайте это изменение без исправления MacKernel из build 2.4.16896.
Публичный API
MacKerneladded — Публичный helper сопоставления TOperatingSystemVersion.utsrelease[2] с индексом MACOS_NAME.MACOS_NUMbehaviour-changed — Верхняя граница расширена до 27, после Golden Gate добавлен macOS 28.MACOS_NAMEbehaviour-changed — Верхняя граница расширена до 27 с Golden Gate и последующим fallback Next.
7
Средний
X64CpuFeatures теперь показывает доступность SSSE3
Публичный set TX64CpuFeatures получает cpuSSSE3 перед cpuAVX, а инициализация включает его при наличии одновременно cfSSE3 и cfSSSE3.
Новые возможности
mormot.core.base
73b03207+6-3
core: new cpuSSSE3 flag in X64CpuFeatures
Влияние
Код может отдельно выбирать SSSE3, но добавление первого enum member сдвигает ordinal и bit positions cpuAVX, cpuAVX2 и cpuHaswell в сохранённых raw masks.
Стоит взглянуть
Перед обновлением найдите сохранённые Ord(TX64CpuFeature) или сериализованные bitmasks TX64CpuFeatures.
Публичный API
TX64CpuFeature.cpuSSSE3added — Добавлен первым bit TX64CpuFeatures перед cpuAVX.
Модули
8
Средний
Длинный и редкий числовой ввод остаётся внутри assembly
x86-64 реализация добавляет scalar assembly-продолжение для длинных мантисс, экспонент и CPU без SSSE3 и использует одну явно выровненную таблицу NumericSimdData для обоих парсеров.
Производительность
mormot.core.text+1
af7922d5+831-280
core: keep numeric parsing in ASM and share aligned SSSE3 data
Влияние
Больше x86-64 входов избегают перехода в Pascal, сохраняя JSON cursor, ошибки, Currency и правила округления. NumericSimdData становится опубликованным test hook под ASMX64.
Стоит взглянуть
Используйте финальную build, поскольку последующие commits рефакторят и исправляют новый assembly-путь.
Публичный API
NumericSimdDataadded — Публикуется только под ASMX64 как точка входа выровненного storage для тестов парсера.
9
Средний
Delphi Win64 получил быстрый SSSE3-путь для обычных чисел
GetExtended и GetNumericVariantFromJson получают Delphi Win64 assembly, который сворачивает до 15 цифр через SSSE3, проверяет границы страниц 4 КиБ и переходит на Pascal для длинной или редкой grammar.
Производительность
mormot.core.text+1
56417260+617-0
core: accelerate Delphi Win64 number parsing with SSSE3
Влияние
Поддерживаемые CPU Delphi Win64 могут разбирать обычные целые, дроби и короткие экспоненты с меньшим числом scalar операций, сохраняя публичные signatures и Pascal fallback.
Стоит взглянуть
Проведите benchmark и regression tests финальной build на самом старом поддерживаемом Win64 CPU с SSSE3.
10
Средний
Pascal-масштабирование floating point устраняет лишнюю работу
GetExtended упрощает проверку экспоненты, индексацию степеней десяти и условия пути Clinger, заменяя повторные циклы масштабирования FP80 двумя компактными таблицами степеней.
Производительность
mormot.core.text
af318893+74-57
core: optimized GetExtended() pascal code
Влияние
Переносимый parsing Delphi/FPC выполняет меньше ветвлений и операций индексации; публичные signatures и принимаемый синтаксис не изменены.
Модули
11
Средний
Одно- и двузначные целые обходят общий SIMD reduction
Общий x86-64 assembly повторно использует уже вычисленные цифры в xmm0 для одно- и двузначных целых результатов GetExtended и GetNumericVariantFromJson с отдельным signed и varInteger storage.
Производительность
mormot.core.base.asmx64
102fa3d9+43-11
core: optimized #582 asm for 1 and 2 digits
Влияние
Очень короткие numeric tokens используют меньше shuffle и multiply instructions на x86-64 assembly-пути; тесты подтверждают точные значения varInteger и end pointers.
Модули
12
Средний
GetInteger и GetCardinal обрабатывают цифры парами
Переносимые циклы GetInteger и GetCardinal теперь разбирают по две цифры за итерацию и при необходимости одну последнюю, не меняя правила знака и завершения.
Производительность
mormot.core.base
d1bf6356+35-15
core: rewritten GetInteger/GetCardinal
Влияние
JSON- и text helpers Delphi/FPC, вызывающие эти routines, выполняют меньше итераций; signatures и документированные результаты не изменены.
Модули
13
Средний
FPC Win64 и Linux подключены к SSSE3-пути парсера
x86-64 parser адаптирует передачу аргументов и синтаксис выравнивания для FPC и ABI System V, добавляя безопасную assembly-обработку signed NaN/Inf и неполных префиксов.
Компилятор и платформы
mormot.core.text+1
9d219b99+100-26
core: support SSSE3 number parsing on FPC Win64 and Linux
Влияние
Builds FPC x86-64 на Windows и Linux могут использовать то же ускорение SSSE3 без изменения вызывающего кода; CPU без SSSE3 и необычный ввод сохраняют эквивалентный fallback.
Стоит взглянуть
Перед развёртыванием запустите suite числовых преобразований на FPC Win64 и Linux x86-64.
14
Низкий
Builds BSD избегают предупреждений преобразования нуля в TThreadID
TMultiLightLock.Init, Done и UnLock явно приводят ноль к TThreadID при очистке ThreadID.
Компилятор и платформы
mormot.core.os
9bffea66+5-5
core: fixed compilation warning on BSD
Влияние
Компиляция BSD/FPC становится чище; сгенерированное поведение блокировки и публичные API не изменены.
Модули
15
Низкий
Оба x86-64 numeric parser перенесены в общий include
Assembly-тела и константы перенесены из mormot.core.text и mormot.core.variants в mormot.core.base.asmx64.inc, а Pascal-реализации остаются в исходных units.
Внутреннее устройство
mormot.core.base+3
e86c5f33+1217-1203
core: moved #582 x86_64 asm to mormot.core.base.asmx64.inc
Влияние
Изменений для вызывающего кода нет; консолидация устраняет дублирование интеграции и централизует последующие исправления Delphi и FPC x86-64.
16
Низкий
Assembly GetExtended реорганизован для интеграции FPC
x86-64 assembly GetExtended механически реорганизован вокруг общих labels, констант и директив компилятора без предполагаемого функционального изменения.
Внутреннее устройство
mormot.core.text
b082ba10+380-381
core: refactored #582 x64 asm
Влияние
Изменений API приложения или поведения не заявлено; перенос готовит общую реализацию для Delphi и FPC.
Модули
17
Низкий
JSON numeric assembly реорганизован для FPC
Assembly GetNumericVariantFromJson перестроен для более чистой интеграции компилятора без предполагаемого изменения cursor, VType, значения или ошибок.
Внутреннее устройство
mormot.core.text+1
2201a7b9+348-364
core: refactored GetNumericVariantFromJson() x64 asm
Влияние
Прикладной код не видит изменений публичного API; это внутренняя компоновка перед переносом реализации в общий include.
18
Низкий
Циклы пар цифр упрощены без изменения семантики
GetInteger и GetCardinal заменяют вложенные блоки else на continue и общий путь последней одиночной цифры.
Внутреннее устройство
mormot.core.base
8924ade8+10-14
core: minor GetInteger/GetCardinal refactoring
Влияние
Функциональных изменений, изменений API или backend behavior нет; сокращены только переписанные циклы.
Модули
19
Низкий
Числовые regression tests теперь различают FP80 и binary64
TTestCoreBase.NumericalConversions реорганизован и расширен backend-specific точными битовыми проверками TSynExtended, JSON variants, Currency и длинных десятичных входов.
Тесты
4fb42e12+110-66
tests: enhanced TTestCoreBase.NumericalConversions
Влияние
Изменений API приложения нет; различия точности backend теперь проверяются явно вместо общих ожиданий binary64.
20
Низкий
Тесты числовых преобразований добавляют округление и signed границы
TTestCoreBase.NumericalConversions добавляет точные битовые проверки десятичного округления, отрицательных значений и граничного ввода после merge парсера.
Тесты
81fff99f+17-5
tests: some tests
Влияние
Изменений прикладного кода и публичного API нет; расширенная suite выявляет регрессии парсера на разных compiler backend.
21
Низкий
Границы kernel-to-name macOS получили прямые тесты
TTestCoreBase проверяет MacKernel на нижних границах, Darwin 24–25, пропущенном slot 26 и будущих значениях.
Тесты
870336b8+16-2
test: cover OSX kernel number to Apple Corp marketing "logic"
Влияние
Изменений прикладного кода нет; тесты выявляют неверное сопоставление новых Darwin releases первой логикой offset.