Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#1,287 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
c
領域
devtools

調査の方向性

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 の本文から書いたものです。

説明

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).

主要言語
C
スター
3
フォーク
7
平均マージ
4時間 15分
マージ済み PR(30日)
106

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

InauguralSystems/EigenScript のほかの issue

InauguralSystems/EigenScript の issue をすべて見る

似ている issue

C の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。