Clause
← Toute la documentation

L'original anglais a changé depuis cette traduction ; certaines parties peuvent donc être obsolètes. Lire en anglais

Traduit de l'original anglais · 1e3a39c8-dirty · 2026-10-26

Validation

Référence actuelle

Dernières portes de validation enregistrées sur l'hôte de développement Windows x64 (clang-cl et SDK LLVM 23.1.2, /MT, _ITERATOR_DEBUG_LEVEL=0) ; les étapes suivantes enregistrent les leurs dans .agents/00-finished.md :

VérificationRésultat
CTest Debug combiné à neuf (2026-10-14)299/300 réussis ; l'échec est la borne connue de taille d'IR de codegen_measurements ; codegen_resource_cli est désactivé
check-quality-all (même exécution)Propre ; Lizard CCN 10
Tests d'audit OTP optionnels (2026-10-14, version épinglée d199a49a01a2, OTP oracle 29.1.1)17/17
regenerate.py --corpus all --check (idem)19/19 corpus reproduits

Exécuter la porte de validation

Depuis un shell développeur Visual Studio x64 avec C:\Program Files\LLVM\bin dans le PATH (la sélection automatique du SDK réutilise 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, one unit per header
cmake --build build/debug --target check-quality-all  # whole tree

Linux

La même porte s'exécute sous Linux avec le SDK LLVM 23.1.2 pour Linux épinglé comme compilateur hôte (CC/CXX depuis son bin/), la libstdc++ du système, Ninja et CMake 3.28 ou plus récent. Boost 1.90 et toml++ 3.4.0 proviennent de paquets installés ou sont extraits dans thirdparty/ (boost_1_90_0/, tomlplusplus-3.4.0/) ; seul Windows les télécharge. Le ld.lld de l'archive de release est lié à ICU 70 (Ubuntu 22.04) et son lldb à Python 3.14 ; sur les hôtes qui ne les ont pas, linking_lto a besoin d'ICU 70 dans LD_LIBRARY_PATH, et linking_debugger utilise GDB.

cmake --preset debug --fresh -G Ninja -DBUILD_TESTING=ON
cmake --build build/debug
ctest --preset debug -j 16

check-quality (Lizard, clang-tidy) ne s'exécute que sur l'hôte de développement Windows ; les autres hôtes compilent et exécutent les tests (il a été propre une fois sous Linux, voir l'historique).

Autres cibles

Les cibles 32 bits et ARM sont vérifiées sans compilateur construit pour elles (aucun SDK LLVM n'existe pour ces hôtes) :

Fixtures et provenance

Conception des tests

Le comportement est testé via la vraie CLI, les objets émis, des consommateurs natifs liés et les références OTP. Des tests unitaires ciblés ne subsistent que là où le code source ne peut pas atteindre l'état voulu, chacun avec son objectif indiqué dans le test :

Les cas liés aux capacités du système de fichiers (liens, alias de casse) signalent des tests ignorés au cas par cas ; ils ne remplacent jamais la réussite d'un test complet.

État des plateformes et des sanitizers

Benchmarks

Comparaison manuelle des performances avec Erlang/OTP. Elle ne fait jamais partie de CTest, de la porte de commit ni de check-quality, et elle seule a besoin d'un Erlang/OTP sur l'hôte ; les résultats sont des éléments propres à l'hôte, pas des résultats de la porte.

make-benchmark.bat                         # Windows; set JOBS=N to cap parallel builds
make-benchmark.bat --repeat 9 --only bench_gc,bench_msg
make-benchmark.bat --cpus all                 # unpinned set; default --cpus performance
make benchmark BENCH_ARGS="--baseline HEAD~5"   # other hosts

Historique

Condensé à partir des anciens comptes rendus par étape (originaux dans l'historique Git jusqu'au commit 2777c98). Sauf mention contraire : Windows x64, LLVM 23.1.2, version épinglée 21776803ecd1, OTP oracle 29.1.1 / ERTS 17.1. Les nombres de tests correspondent à des passes CTest complètes sans aucun test ignoré.

DateJalonTestsUnités de qualitéNotes
2026-09-19Analyseur syntaxique phase VI (macOS arm64, OTP 29.1 751f87b7, oracle 29.0.5)46toutes344/344 productions observées ; corpus de 10 fichiers
2026-09-20Projets (macOS arm64)64toutesDebug, compilateur seul, ASan+UBSan
2026-09-28Migration des tests vers des flux CLI ; réparation de la porte Windows75toutesDépassement de pile de parser_hardening corrigé avec une pile de 8 Mio ; Lizard + clang-tidy propres
2026-09-29Jalon du compilateur, steps 1–46103182Compilateur seul 80, runtime seul 16, ASan runtime 16
2026-10-01 – 10-03Plan motifs/guards PG1–PG20104–131189–258Révisions ABI 2–4 ; PG15a a rendu les références indépendantes d'OTP (audits optionnels, 131 → 118 tests) ; clos à 19 corpus, 67 634 valeurs, 1 969 résultats semés
2026-10-03Audit des sources OTP125258Fichiers OTP copiés remplacés par des fragments locaux ; une comparaison par fenêtres de 60 jetons avec 4 150 fichiers Erlang et 1 190 fichiers C/C++ d'OTP n'a trouvé aucun recouvrement hormis un tuple d'entiers généré
2026-10-03Référence du plan 11 step 1 (commit b1a471f, version épinglée 21776803ecd1, Lizard 1.24.0, clang-tidy 22.1.8)125 (122 rapide)258Complet 729 s en série, 85 s avec -j 16 ; 14/14 audits ; 19/19 corpus ; objets étrangers O0/O2 inspectés pour 7 cibles
2026-10-03Steps 2, 4 : fixtures de programmes, affichage des termes126–128265Six références de programmes OTP ; 9 542 références ~w/display
2026-10-04Steps 8, 8I : exécuteur d'exécutables, tas classique (phases B, C closes)138–144272–276Complet -j 16 235–370 s
2026-10-04 – 10-05Steps 9–20 : case, if, levées d'exceptions, catch, try, traces de pile, maybe (phase D close), récursion, cadres et appels terminaux146–158277–278Tests rapides et tests concernés en mode complet à chaque étape ; complet -j 16 155/155 en 259 s à la phase D
2026-10-06Steps 21–28 : compréhensions (phase E close), racines et collecte, limites de mémoire et de termes (27A–27E), copies de graphes159–166278–281Complet -j 12 105–275 s ; le step 27 a supprimé les plafonds mémoire par défaut
2026-10-07Steps 29–35 : records, native records (ABI 6), funs (ABI 7), fermetures, funs nommées, appels dynamiques (ABI 8)167–177283–290Complet -j 12 119–152 s
2026-10-09Step 63 Linux x86-64 (WSL2 Ubuntu 25.04, glibc 2.41, clang du SDK LLVM 23.1.2, libstdc++ 14, GDB 16.2)235338CTest complet 235/235 en 161 s ; Lizard et clang-tidy propres sous Linux (7 rapports de l'analyseur dans les en-têtes Boost ignorés) ; porte Windows 235/235 avec les en-têtes vérifiés
2026-10-09Step 64 32 bits : Windows x86 (WoW64, clang-cl) et Linux i386 (chroot Debian 13, clang 19)42 + 65 références—Tests runtime/ABI 42/42 nativement sur les deux ; références cross.py 65/65 sur les deux (exécutions integer_limit réservées au 64 bits ignorées)
2026-10-09Step 65 Linux arm64 et armhf (sysroots Debian 13, qemu-user 9.2)42 + 65 références—Tests runtime/ABI 42/42 chacun ; références 64/65 chacun (port_spawn enoent : lacune de posix_spawn dans qemu), limite d'exécution 900 s
2026-10-10Step 67 ASan + UBSan + LeakSanitizer (Linux x86-64)235—Aucun rapport de sanitizer ; quatre tests de refus de l'hôte injectés hors du périmètre d'ASan ; CLAUSE_TEST_TIMEOUT_SCALE=10
2026-10-10Step 68 ThreadSanitizer (Linux x86-64)233—Une inversion d'ordre des verrous corrigée (Executor::clear) ; ensuite aucun rapport dans le CTest complet ni dans 15 tests de concurrence x5
2026-10-10Steps 65A–65C : behaviours, module_info/0,1, imports234–236 rapide342–344Les références de lint et d'exécutables se reproduisent sous OTP 29.1.1
2026-10-11Steps 73A–73G parse transforms242/243 rapide—Échec connu de codegen_resource_cli, désactivé depuis
2026-10-12Steps 62D1–62E répertoire de build et caches263/264toutesCTest complet, échec connu de codegen_resource_cli ; check-quality-all propre
2026-10-13Steps 58U–58W cache d'inférence278/279toutesCTest complet, échec connu de codegen_measurements ; check-quality-all propre
2026-10-14Step 41S prim_eval et la réexécution de luerl (H3 clos)299/300toutesVoir la référence actuelle
2026-10-17Plan 20 OPTM.2 (Term d'un mot, termes persistants sur place et récupérés) et OPTM.3 (accesseurs sans vérification)330/332toutesCTest complet : échec connu de codegen_measurements, et library_freshness (OTP de l'hôte) attend encore les corps de bouchons not_implemented que b0e62a38 a remplacés ; check-quality-all propre
2026-10-19Plan 21 LIB10F ThreadSanitizer (Linux x86-64) : références ETS et digraph, runtime_concurrency10—Aucun rapport ; ets_portions sur un seul thread de travail a montré qu'une suppression libérait en deux portions, corrigé en comptant un objet libéré comme un objet parcouru

PG = étape du plan motifs/guards ; les comptes rendus des étapes du plan 11 sont archivés dans .agents/00-finished.md.