@@ -13,51 +13,32 @@ at every comparison site), a reserved `__`-prefix namespace for
1313compiler-generated helpers, and struct field defaults (` name: T = expr ` , filled at
1414construction on both backends).
1515
16- ## Must unblock awkward valid ports
17-
18- - [ ] ** Method/property lowering ergonomics.** Provide a simple way to model
19- Python-style getter properties and method-like computed fields.
20- _ Why:_ tinygrad has many small property methods where the body is simple but the
21- RSS surface needs repetitive wrappers.
22- _ Acceptance:_ getter-style members lower predictably, can borrow ` self ` , and
23- preserve member identity for diagnostics and inventory.
24-
25- ## Reduce manual translation volume
26-
27- - [ ] ** Container operation coverage.** Fill remaining ` List ` /` Map ` /` Set ` /
28- ` Bytes ` /` Buffer ` /tuple/optional gaps (` len ` , ` append ` , ` pop ` , index, slice,
29- membership, iteration, clone/copy).
30- _ Why:_ tinygrad code is dense with these; every missing builtin becomes a
31- hand-written helper.
32- _ Acceptance:_ supported ops compile and lower to idiomatic Rust, or fail with an
33- error naming the unsupported operation and type.
34-
35- - [ ] ** Callable and limited closure support.** Beyond ` noescape ` callbacks: pass
36- * named functions* as values and support richer checked captures for callbacks
37- and rewrite rules.
38- _ Why:_ tinygrad uses lambdas/callback matchers; without this the port must
39- defunctionalize logic into many structs.
40- _ Acceptance:_ RSS can pass named functions and simple closures to higher-order
41- helpers with checked capture ownership.
42-
43- - [ ] ** String and bytes utility coverage.** Fill gaps for split/join/search,
44- prefix/suffix checks, formatting, byte conversion, and cheap slicing.
45- _ Why:_ device/runtime/autogen and file-path code are string/bytes-heavy.
46- _ Acceptance:_ common string/bytes operations compile without local helper shims,
47- or fail with precise unsupported-operation diagnostics.
48-
49- ## Tooling and diagnostics
50-
51- - [ ] ** RSS-to-Rust diagnostic provenance.** Source maps exist; carry the source
52- span, source symbol, and lowered Rust symbol all the way through a * backend*
53- Rust error.
54- _ Why:_ when Rust fails, the port currently has to infer which RSS declaration
55- produced the bad item.
56- _ Acceptance:_ a Rust backend error reports the RSS file, source span, source
57- symbol, and lowered Rust symbol.
58-
59- - [ ] ** External/FFI declaration ergonomics.** Declare copied runtime/autogen and
60- device boundaries compactly — ` native fn ` exists, but make whole boundaries easy
61- to bind without large wrapper files.
62- _ Acceptance:_ external functions/types can be declared compactly, checked, and
63- included in the symbol inventory with provenance.
16+ Verified already-met against their written acceptance (closed without new code):
17+ - ** Method/property getters** — modeled as zero-argument methods
18+ (` fn Box.value(self: read Box) -> Int ` ) called via receiver-call shorthand
19+ (` read b.value() ` ); they lower predictably, borrow ` self ` , and keep member
20+ identity in the symbol inventory.
21+ - ** Container / string-bytes coverage** — broad ` List ` /` Map ` /` Set ` /` String ` /
22+ ` Bytes ` operations exist, and any unsupported op fails with a precise
23+ op+type diagnostic (` RS0206: call to \ ` List.frobnicate\` does not resolve`).
24+ Specific further ops are added on demand when the port names them.
25+ - ** External/FFI ergonomics** — ` native fn ` declares external boundaries
26+ compactly, is checked, and appears in the symbol inventory with provenance.
27+
28+ ## Remaining
29+
30+ - [ ] ** Callable: named function values.** Passing a * named function* as a
31+ callback value is rejected (` RS0026: unknown value binding ` ); only inline
32+ closures work. Allow an identifier that names a top-level function to be passed
33+ where a ` Fn(...) ` / ` noescape Fn(...) ` parameter is expected, checked against the
34+ function's signature and lowered as a function value.
35+ _ Why:_ tinygrad passes named matcher/rewrite functions; without this the port
36+ wraps each in a closure or struct.
37+
38+ - [ ] ** RSS-to-Rust diagnostic provenance: symbol names.** Remapped backend
39+ errors already report the RSS file, source span, generated Rust location, and
40+ rustc code. Still missing: the enclosing ** source symbol** name and the
41+ ** lowered Rust symbol** name.
42+ _ Why:_ naming the declaration (not just the line) speeds triage.
43+ _ Acceptance:_ a remapped Rust backend error names the RSS source symbol and its
44+ lowered Rust symbol.
0 commit comments