Experiment: a lint that marks nondeterminism like Rust's unsafe, measured on our consumers first (#1286)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
説明
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).
- 主要言語
- C
- スター
- 3
- フォーク
- 7
- 平均マージ
- 4時間 15分
- マージ済み PR(30日)
- 106
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
InauguralSystems/EigenScript のほかの issue
-
area:lint-tooling bug
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
InauguralSystems/EigenScript#1340 ·
メンテナーはふだん 1 日以内に返信
-
area:stdlib found-by:code-review kind:silent-wrong
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
InauguralSystems/EigenScript#1338 ·
メンテナーはふだん 1 日以内に返信
-
area:lint-tooling found-by:critic kind:docs-drift
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
InauguralSystems/EigenScript#1335 ·
メンテナーはふだん 1 日以内に返信
-
area:ci found-by:critic kind:gate-defect
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
InauguralSystems/EigenScript#1311 ·
メンテナーはふだん 1 日以内に返信
-
enrolment: decide test_gc_runner_controls.py (exempt vs enrol) and whether floors need a ratchetオープンarea:gates found-by:critic kind:decision
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
InauguralSystems/EigenScript#1280 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
InauguralSystems/EigenScript の issue をすべて見る
似ている issue
-
bug needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
netdata/netdata#24062 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
riscv-software-src/riscv-isa-sim#2448 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
難易度 1/5 1時間未満 初心者へのやさしさ 75/100
NabuCasa/silabs-firmware-builder#231 · コメント 1 件 ·