Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Experiment: a lint that marks nondeterminism like Rust's unsafe, measured on our consumers first (#1286)

Aperta
#1,287 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

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
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
c
Ambito
devtools

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

area:lint-tooling area:trace-tape kind:decision

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:

  1. Captured: time, random, file/network/HTTP I/O, environment, audio/gfx input. The tape records these, so replay reproduces them. Milder.
  2. 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 in trace_mt live 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 --json report 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 (and allow-file). No new syntax for the experiment.

Experiment:

  1. 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.
  2. Run it over the consumers: liferaft, tidelog, DMG, Tidepool, dynamics, EigenMiniSat, iLambdaAi.
  3. 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 nondet marker syntax and a --deterministic strict 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

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di InauguralSystems/EigenScript

Tutte le issue di InauguralSystems/EigenScript

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.