Clause
← Уся документація

Перекладено з англійського оригіналу · 06042fa · 2026-10-09 · Читати англійською

Валідація

Поточний базовий рівень

Plan 11 step 1, 2026-10-03, коміт b1a471f, Windows x64: clang-cl 23.1.2, LLVM SDK 23.1.2 (/MT, _ITERATOR_DEBUG_LEVEL=0), Lizard 1.24.0, clang-tidy 22.1.8, прив'язка OTP 21776803ecd1 з еталонним OTP 29.1.1 / ERTS 17.1.

ПеревіркаРезультат
Свіжий комбінований Debug CTest125/125, нуль пропусків (729 с послідовно; 85 с з -j 16)
CTest у швидкому режимі (debug-fast)122 тести, близько 60 с
check-qualityПройдено; Lizard CCN 10, clang-tidy для 258 робочих одиниць трансляції
Опційні тести аудиту OTP14/14
regenerate.py --corpus all --check19/19 корпусів відтворюються
Об'єктні файли O0/O2 для інших платформПеревірено 7 цілей (Linux x86/x64/ARM/AArch64, Windows x86/x64, Apple Silicon)

Запуск перевірки

З командного рядка розробника Visual Studio x64 з C:\Program Files\LLVM\bin у PATH (автоматичний вибір SDK повторно використовує thirdparty/):

cmake --preset debug --fresh -DBUILD_TESTING=ON -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build build/debug
ctest --preset debug-fast                  # during development
ctest --preset debug -j 16                 # full mode, at feature completion
cmake --build build/debug --target check-quality      # changed files + dependents
cmake --build build/debug --target check-quality-all  # whole tree

Фікстури та походження

Дизайн тестів

Поведінка тестується через справжній CLI, згенеровані об'єктні файли, скомпоновані нативні споживачі та еталони OTP. Цільові модульні тести залишаються лише там, де вихідний код не може досягти потрібного стану, і для кожного його призначення вказано в самому тесті:

Випадки, що залежать від можливостей файлової системи (посилання, псевдоніми регістру), повідомляють про пропуски окремих випадків; вони ніколи не підміняють проходження цілого тесту.

Стан платформ і санітайзерів

Історія

Стиснуто з колишніх записів для окремих кроків (оригінали в історії Git до коміту 2777c98). Якщо не зазначено інше: Windows x64, LLVM 23.1.2, прив'язка 21776803ecd1, еталонний OTP 29.1.1 / ERTS 17.1. Кількості тестів — це повні проходження CTest з нулем пропусків.

ДатаВіхаТестиОдиниці якостіПримітки
2026-09-19Синтаксичний аналізатор, фаза VI (macOS arm64, OTP 29.1 751f87b7, еталон 29.0.5)46усі344/344 продукцій засвідчено; корпус із 10 файлів
2026-09-20Проєкти (macOS arm64)64усіDebug, лише компілятор, ASan+UBSan
2026-09-28Міграція тестів на робочі процеси CLI74/75—Базовий рівень 78/93; переповнення стека в parser_hardening пізніше виправлено стеком 8 MiB
2026-09-28Відновлення перевірки на Windows75усіLizard + clang-tidy без зауважень
2026-09-29Віха компілятора, кроки 1–46103182Лише компілятор 80, лише runtime 16, runtime ASan 16
2026-10-01PG1 семантична матриця та докази104—Хеші вихідного коду зафіксовано
2026-10-01PG2 канал збоїв108—ABI rev 2
2026-10-01PG3 атоми109189ABI rev 3
2026-10-01PG4 зв'язування з областю видимості11119126 випадків допустимості
2026-10-02PG5 семантика зразків11319692 модулі допустимості
2026-10-02PG6 зіставлення безпосередніх значень11419934 виклики
2026-10-02PG7 guards для безпосередніх значень1192051,689 викликів
2026-10-02PG8 потік керування guards1202072,075 викликів
2026-10-02PG9 упорядковані клаузи1212081,020 викликів
2026-10-02PG10 зіставлення в тілі1222091,666 викликів
2026-10-02PG11 стабільна купа та корені123213ABI rev 4
2026-10-02PG12 кортежі/списки/рядки1252214,801 виклик
2026-10-02PG13 цілі числа довільної точності12723116,065 викликів
2026-10-02PG14 числа з рухомою комою12923814,436 викликів
2026-10-02PG15 maps1312448,010 викликів
2026-10-02PG15a еталони без OTP11824414 корпусів, 49,959 значень; аудити опційні
2026-10-02PG16 bitstrings1202538,826 викликів
2026-10-03PG17 records на кортежах1212571,025 результатів, 29 семантичних випадків
2026-10-03PG18 каталог guards12225781 рядок, 5,033 результати
2026-10-03PG19 факти зв'язування123258822 результати, 976 перевірок домінування
2026-10-03PG20 завершення12425819 корпусів, 67,634 значення, 1,969 засіяних результатів
2026-10-03Аудит джерел OTP125258Скопійовані файли OTP замінено локальними фрагментами
2026-10-03Plan 11 step 1, базовий рівень125258Див. поточний базовий рівень
2026-10-03Plan 11 step 2, фікстури програм126258Шість еталонів OTP; швидкий режим 123 тести; повний -j 16 83 с
2026-10-03Plan 11 step 4, друк термів128 швидких2659,542 еталони ~w/display; 154 скомпільовані виклики display в усіх політиках; clang-tidy запущено з одним завданням (паралельні запуски аварійно завершували інструмент на незмінених одиницях)
2026-10-04Plan 11 step 8, засіб запуску виконуваних файлів (phase B закрито)138 (135 швидких)272Випадки demo, exits у восьми комбінаціях політик/драйверів; повний -j 16 235 с
2026-10-04Plan 11 step 8I, класична купа (phase C закрито)144 (140 швидких)276Повний -j 16 370 с: 143/144, codegen_dependency перевищив тайм-аут 120 с під навантаженням і пройшов окремо за 29 с; Lizard-all 0 попереджень; tidy-all пройшов з одним завданням після тихого виходу інструмента з двома завданнями
2026-10-04Plan 11 step 9, case і begin146 (142 швидких)114 зміненихШвидкий 142/142; зачеплені тести 7/7 у повному режимі; Lizard 0 попереджень; tidy пройшов з одним завданням після тихого виходу з двома завданнями
2026-10-05Plan 11 step 10, if147 (143 швидких)114 зміненихШвидкий 143/143; зачеплені тести 8/8 у повному режимі; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 11, генерування винятків у коді148 (144 швидких)124 зміненихШвидкий 144/144; зачеплені тести 22/22 у повному режимі; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 12, catch Expr149 (145 швидких)277Швидкий 145/145; зачеплені тести 25/25 у повному режимі; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 13, try ... of ... catch150 (146 швидких)189 зміненихШвидкий 146/146; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 14, try ... after153 (149 швидких)2 зміненихШвидкий 149/149; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 15, трасування стека та raise/3154 (150 швидких)129 зміненихШвидкий 150/150; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 16, maybe (phase D закрито)155 (151 швидкий)277Швидкий 151/151; повний -j 16 155/155 за 259 с; Lizard-all 0 попереджень; tidy-all пройшов
2026-10-05Plan 11 step 18, рекурсивні графи викликів156 (152 швидких)91 зміненаШвидкий 152/152; зачеплені тести 13/13 у повному режимі; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 19, явні фрейми та хвостові виклики157 (153 швидких)278Швидкий і повний CTest проходять (з випадком step 20: 154/154, 158/158); конфігурація clang-cl; Lizard 0 попереджень; tidy пройшов
2026-10-05Plan 11 step 20, глибока рекурсія в тілі та бюджет стека158 (154 швидких)278Швидкий 154/154; повний 158/158; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 21, спискові comprehensions159 (155 швидких)зміненіШвидкий 155/155; зачеплені тести в повному режимі; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 22, binary та map comprehensions (phase E закрито)160 (156 швидких)усіШвидкий 156/156; повний -j 12 160/160 за 275 с; Lizard-all 0 попереджень; tidy-all пройшов після виправлення чотирьох зауважень у новому коді
2026-10-06Plan 11 step 23, перелік коренів, SafePoint, живі регістри160 (156 швидких)50 зміненихШвидкий 156/156; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 26, збирання зі згенерованого коду161 (157 швидких)63 зміненіШвидкий 157/157; повний -j 12 161/161 за 107 с; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 27, вичерпання купи після збирання162 (158 швидких)50 зміненихШвидкий 158/158; повний -j 12 162/162 за 108 с; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 27, виправлення: без типових обмежень пам'яті162 (158 швидких)50 зміненихПовний -j 12 158/162 за 120 с, 4 codegen_failure_* виправлено очікуванням out_of_memory, потім 10/10 зачеплених; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 27, доповнення: без обмежень на binary чи кількість процесів, --max-atoms164 (160 швидких)281Швидкий 160/160; повний -j 12 164/164 за 105 с; Lizard 0 попереджень; tidy-all пройшов
2026-10-06Plan 11 step 28, копіювання графів між купами, спільні буфери поза купою166 (162 швидких)71 зміненаШвидкий 162/162; повний -j 12 166/166 за 130 с; Lizard 0 попереджень; tidy пройшов
2026-10-07Plan 11 step 29, оновлення records167 (163 швидких)38 зміненихШвидкий 163/163; Lizard 0 попереджень; tidy пройшов; корпус records відтворюється під OTP
2026-10-07Plan 11 step 30, record_info/2168 (164 швидких)42 зміненіШвидкий 164/164; повний -j 12 168/168 за 119 с; Lizard 0 попереджень; tidy пройшов
2026-10-07Plan 11 step 31B, комірки native records і CLAUSE_record_v1 (ABI 6)169 (165 швидких)283 зміненіШвидкий 165/165; повний -j 12 169/169 за 122 с; Lizard 0 попереджень; tidy пройшов після двох виправлень
2026-10-07Plan 11 step 31C, локальні native records170 (166 швидких)285 зміненихШвидкий 166/166; повний -j 12 170/170 за 146 с; Lizard і tidy пройшли після виправлень складності
2026-10-07Plan 11 step 31D, кваліфіковані та імпортовані native records171 (167 швидких)124 зміненіШвидкий 167/167; повний -j 12 171/171 за 129 с; Lizard 0 попереджень; tidy пройшов після трьох виправлень
2026-10-07Plan 11 step 31E, анонімні native records (step 31 закрито)172 (168 швидких)33 зміненіШвидкий 168/168; повний -j 12 172/172 за 124 с; Lizard 0 попереджень; tidy пройшов після одного виправлення
2026-10-07Plan 11 step 32, функціональні значення fun F/A, fun M:F/A (ABI 7)173 (169 швидких)289 зміненихШвидкий 169/169; повний -j 12 173/173 за 122 с; Lizard і tidy пройшли після виправлень складності
2026-10-07Plan 11 step 33, замикання із захопленими змінними175 (171 швидкий)134 зміненіШвидкий 171/171; повний -j 12 175/175 за 126 с; Lizard і tidy пройшли після виправлень складності
2026-10-07Plan 11 step 34, іменовані funs176 (172 швидких)132 зміненіШвидкий 172/172; повний -j 12 176/176 за 152 с; Lizard 0 попереджень; tidy пройшов
2026-10-07Plan 11 step 35, динамічні виклики M:F(Args), apply/2,3, fun M:F/A під час виконання (ABI 8)177 (173 швидких)290 (змінено конфігурацію аналізатора)Швидкий 173/173; повний -j 12 177/177 за 142 с; Lizard 0 попереджень і tidy пройшов після одного виправлення складності та трьох виправлень tidy
2026-10-06Plan 11 step 27E, обмеження великих цілих чисел ERTS, error:system_limit165 (161 швидкий)157 зміненихШвидкий 161/161; повний -j 12 165/165 за 130 с; Lizard 0 попереджень; tidy пройшов; 21 еталон виконуваних файлів відтворюється під OTP
2026-10-06Plan 11 step 27D, без обмежень на розмір map чи роботу з ключами164 (160 швидких)13 зміненихШвидкий 160/160; повний -j 12 164/164 за 115 с; після виправлення tidy у bit_order 35 зачеплених тестів проходять; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 27C, обмеження арності кортежу 16,777,215164 (160 швидких)51 зміненаШвидкий 160/160; повний -j 12 164/164 за 121 с; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 27B, без обмежень на довжину списку чи роботу порівняння164 (160 швидких)4 зміненіШвидкий 160/160; повний -j 12 164/164 за 125 с; Lizard 0 попереджень; tidy пройшов
2026-10-06Plan 11 step 27A, загальне обмеження пам'яті runtime і --max-heap/stack/memory164 (160 швидких)49 зміненихШвидкий 160/160; повний -j 12 164/164 за 118 с; після виправлення tidy у ProcessStack::grow 42 зачеплені тести проходять; Lizard 0 попереджень; tidy пройшов

PG = крок плану зразків/guards (архівовано в .agents/00-finished.md).