Experiment: a lint that marks nondeterminism like Rust's unsafe, measured on our consumers first (#1286)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
The lint rule must identify calls to builtins hooked via TRACE_NONDET_RET/RECORD/TAKE macros (118 sites, 37 distinct builtins). Start by examining the macro definitions and the hook sites in the codebase to derive the class-1 set. Then identify concurrency builtins for class-2. Implement the lint to warn on unacknowledged calls, with within-file call-graph propagation. Run the lint on the listed consumer projects (liferaft, tidelog, etc.) and record warning counts and any real findings of undeclared nondeterminism.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Part of #1286. Status: a measured experiment, not a commitment. Owner idea, 2026-09-23.
Idea. EigenScript's main claim is determinism, but nothing in a program's source says where determinism ends. Rust's unsafe is a required, greppable audit boundary. The EigenScript analogue marks where a program's output can depend on something outside its source and inputs, so that every nondeterministic point is either recorded on the tape or marked in the source.
Two classes, different weight:
- Captured: time, random, file/network/HTTP I/O, environment, audio/gfx input. The tape records these, so replay reproduces them. Milder.
- Uncaptured: thread scheduling (
spawn, channels, tasks, shared state): which thread wins a lock is not on the tape, so replay cannot reproduce it. Tonight's race mutants intrace_mtlive here. Louder.
Facts (main, 2026-09-23):
- There is no central nondet table; builtins are hooked per site by
TRACE_NONDET_RET/RECORD/TAKE("<name>", ...). 118 hook sites name 37 distinct builtins (args,clock_unix,env_get,file_exists,http_*,monotonic_*,net_*,random*,read_*, …). Derive the class-1 set from those sites (or have--api --jsonreport a nondet flag) — never a hand-typed second list. Check that every hook passes a literal name; a variable name would hide a member. - Class 2 is not in that set; it needs its own derived list (the concurrency builtins).
- The acknowledgment already exists:
# lint: allow W0NN(andallow-file). No new syntax for the experiment.
Experiment:
- One new lint rule: a nondet call outside an acknowledged region warns; class 2 gets a stronger diagnostic. Within-file call-graph propagation only, stated as a limit.
- Run it over the consumers: liferaft, tidelog, DMG, Tidepool, dynamics, EigenMiniSat, iLambdaAi.
- Bar (Go vet's criteria, cmd/vet/README): frequency (does it surface REAL undeclared nondeterminism, e.g. in liferaft/tidelog's determinism tests?) and precision (is nearly every warning worth examining?). Record the counts and each real finding here.
Decision after measurement:
- It finds real problems → keep the lint, and consider a
nondetmarker syntax and a--deterministicstrict mode, each justified by the measured findings. - Noise or nothing → close with the numbers; it did not earn its place.
Out of scope for the experiment: new syntax, runtime strict mode, full effect typing (Koka/Unison-style).
- Lingua principale
- C
- Stelle
- 3
- Fork
- 7
- Merge medio
- 3h 58m
- PR unite (30g)
- 105
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di InauguralSystems/EigenScript
-
area:lint-tooling bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
InauguralSystems/EigenScript#1340 ·
I maintainer di solito rispondono entro 1 giorno
-
area:stdlib found-by:code-review kind:silent-wrong
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
InauguralSystems/EigenScript#1338 ·
I maintainer di solito rispondono entro 1 giorno
-
area:lint-tooling found-by:critic kind:docs-drift
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
InauguralSystems/EigenScript#1335 ·
I maintainer di solito rispondono entro 1 giorno
-
area:ci found-by:critic kind:gate-defect
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
InauguralSystems/EigenScript#1311 ·
I maintainer di solito rispondono entro 1 giorno
-
enrolment: decide test_gc_runner_controls.py (exempt vs enrol) and whether floors need a ratchetApertaarea:gates found-by:critic kind:decision
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
InauguralSystems/EigenScript#1280 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di InauguralSystems/EigenScript
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
johnsonjh/emu2-cpm86#68 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Zenmap CrashApertaZenmap
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
BasedHardware/omi#19306 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
fastfetch-cli/fastfetch#2619 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100