mORMot2 DailyЕжедневный обзор коммитов апстрима

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.

Сборка2.4.16865 → 2.4.16897
Коммиты24
Строки+6602 -2528
Чтение4 мин

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 сохраняют специализированный путь.

Arnaud Bouchez · 07:52 UTC · открыть коммит на GitHub →

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 границах.

Mike · 23:39 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 13:26 UTC · открыть коммит на GitHub →

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.

Публичный API

  • MacKernelbehaviour-changed — Darwin releases выше 26 теперь сопоставляются с вычитанием одного пропущенного kernel slot.

Модули

Arnaud Bouchez · 18:17 UTC · открыть коммит на GitHub →

5 Средний Ошибки диапазона FP80 сохраняют разобранный знак Когда отдельный FP80-путь GetExtended отклоняет модуль экспоненты 5120 или больше, он теперь применяет fNeg к частичному результату перед возвратом ошибки. Исправления mormot.core.text 92faab04+5-3

core: ensure GetExtended() FP80 is consistent

Влияние

Пути FP80 и binary64 теперь согласованы по знаку частичного значения при ошибке диапазона; это главным образом влияет на диагностические или permissive callers, читающие значение при err=1.

Модули

Arnaud Bouchez · 14:43 UTC · открыть коммит на GitHub →

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.

Публичный API

  • MacKerneladded — Публичный helper сопоставления TOperatingSystemVersion.utsrelease[2] с индексом MACOS_NAME.
  • MACOS_NUMbehaviour-changed — Верхняя граница расширена до 27, после Golden Gate добавлен macOS 28.
  • MACOS_NAMEbehaviour-changed — Верхняя граница расширена до 27 с Golden Gate и последующим fallback Next.

Arnaud Bouchez · 18:00 UTC · открыть коммит на GitHub →

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.

Модули

Arnaud Bouchez · 09:42 UTC · открыть коммит на GitHub →

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 для тестов парсера.

Mike · 02:54 UTC · открыть коммит на GitHub →

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.

Mike · 23:40 UTC · открыть коммит на GitHub →

10 Средний Pascal-масштабирование floating point устраняет лишнюю работу GetExtended упрощает проверку экспоненты, индексацию степеней десяти и условия пути Clinger, заменяя повторные циклы масштабирования FP80 двумя компактными таблицами степеней. Производительность mormot.core.text af318893+74-57

core: optimized GetExtended() pascal code

Влияние

Переносимый parsing Delphi/FPC выполняет меньше ветвлений и операций индексации; публичные signatures и принимаемый синтаксис не изменены.

Модули

Arnaud Bouchez · 09:39 UTC · открыть коммит на GitHub →

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.

Arnaud · 23:23 UTC · PR #582 · открыть коммит на GitHub →

12 Средний GetInteger и GetCardinal обрабатывают цифры парами Переносимые циклы GetInteger и GetCardinal теперь разбирают по две цифры за итерацию и при необходимости одну последнюю, не меняя правила знака и завершения. Производительность mormot.core.base d1bf6356+35-15

core: rewritten GetInteger/GetCardinal

Влияние

JSON- и text helpers Delphi/FPC, вызывающие эти routines, выполняют меньше итераций; signatures и документированные результаты не изменены.

Модули

Arnaud Bouchez · 14:41 UTC · открыть коммит на GitHub →

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.

Mike · 00:53 UTC · открыть коммит на GitHub →

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 не изменены.

Модули

Arnaud Bouchez · 18:01 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 12:55 UTC · PR #582 · открыть коммит на GitHub →

16 Низкий Assembly GetExtended реорганизован для интеграции FPC x86-64 assembly GetExtended механически реорганизован вокруг общих labels, констант и директив компилятора без предполагаемого функционального изменения. Внутреннее устройство mormot.core.text b082ba10+380-381

core: refactored #582 x64 asm

Влияние

Изменений API приложения или поведения не заявлено; перенос готовит общую реализацию для Delphi и FPC.

Модули

Arnaud Bouchez · 09:43 UTC · PR #582 · открыть коммит на GitHub →

17 Низкий JSON numeric assembly реорганизован для FPC Assembly GetNumericVariantFromJson перестроен для более чистой интеграции компилятора без предполагаемого изменения cursor, VType, значения или ошибок. Внутреннее устройство mormot.core.text+1 2201a7b9+348-364

core: refactored GetNumericVariantFromJson() x64 asm

Влияние

Прикладной код не видит изменений публичного API; это внутренняя компоновка перед переносом реализации в общий include.

Arnaud Bouchez · 11:36 UTC · открыть коммит на GitHub →

18 Низкий Циклы пар цифр упрощены без изменения семантики GetInteger и GetCardinal заменяют вложенные блоки else на continue и общий путь последней одиночной цифры. Внутреннее устройство mormot.core.base 8924ade8+10-14

core: minor GetInteger/GetCardinal refactoring

Влияние

Функциональных изменений, изменений API или backend behavior нет; сокращены только переписанные циклы.

Модули

Arnaud Bouchez · 18:01 UTC · открыть коммит на GitHub →

19 Низкий Числовые regression tests теперь различают FP80 и binary64 TTestCoreBase.NumericalConversions реорганизован и расширен backend-specific точными битовыми проверками TSynExtended, JSON variants, Currency и длинных десятичных входов. Тесты 4fb42e12+110-66

tests: enhanced TTestCoreBase.NumericalConversions

Влияние

Изменений API приложения нет; различия точности backend теперь проверяются явно вместо общих ожиданий binary64.

Arnaud Bouchez · 13:27 UTC · открыть коммит на GitHub →

20 Низкий Тесты числовых преобразований добавляют округление и signed границы TTestCoreBase.NumericalConversions добавляет точные битовые проверки десятичного округления, отрицательных значений и граничного ввода после merge парсера. Тесты 81fff99f+17-5

tests: some tests

Влияние

Изменений прикладного кода и публичного API нет; расширенная suite выявляет регрессии парсера на разных compiler backend.

Arnaud Bouchez · 06:28 UTC · открыть коммит на GitHub →

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.

Arnaud Bouchez · 18:03 UTC · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13