Repository navigation
spec(port): port specs/port/trinity/src/tri/compat/managed_list.t27 (Closes #9860) - #10141
Closed
dmitrii-f-t27 wants to merge 1 commit into
Closed
dmitrii-f-t27 wants to merge 1 commit into
dmitrii-f-t27 wants to merge 1 commit into
Conversation
…loses gHashTag#9860) Port gHashTag/trinity:src/tri/compat/managed_list.zig (at ee512359254b, ~129 lines) as specs/port/trinity/src/tri/compat/managed_list.t27 - Roadmap Stage 5, goal gHashTag#4547, target t27c gen-rust. The original is a generic wrapper, ManagedList(comptime T: type), restoring the Zig 0.14 allocator-with-list API over Zig 0.15's pass-the-allocator API. Generics cannot be expressed in this language, so the port instantiates the wrapper's decisions for the concrete element type u32 at a fixed capacity of 16 - the generic itself (original line 17) is the named missing piece, everything it wraps carries: the empty init, append within capacity, len, isEmpty, get, set, clearRetainingCapacity (the count drops, the storage stays), the pop pair (an empty list pops nothing, a non-empty one shrinks by one) and the iterator (has-next at the index, next returning the item and the advanced index). One generator quirk is worked around in place and commented: a copy-then-indexed-write-then-return emits the wrong return variable, and a trailing alias keeps the picker on the mutated copy. The allocator that travels with the list is the caller's plumbing here. All four generators (gen, gen-rust, gen-c, gen-verilog) emit this spec before the push. Verified: parse OK, spec-status IMPLEMENTED, typecheck 0 errors, coverage 11/11, test-report 7/7 pass, 0 BLOCKED, gen 158 lines with 0 'not yet implemented', boundary exactly this one file, dupe_scan: all 11 function names unique, bare scan reports zero error lines. Dmitrii Fedorov ([@dmitrii-f-t27](https://github.com/dmitrii-f-t27))
Contributor
Author
|
@gHashTag Please merge this PR into master via the golden chain — rights on gHashTag/t27 are read-only for me (403), so only you can merge it. Verification of this head (ce83b82, on current master — no extra merge needed):
After the merge I will: verify the spec file live on the merge SHA, confirm #9860 auto-closed, and file the 14-step report. Dmitrii Fedorov (@dmitrii-f-t27) |
This was referenced Oct 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Port
gHashTag/trinity:src/tri/compat/managed_list.zig(atee512359254b, ~129 lines) asspecs/port/trinity/src/tri/compat/managed_list.t27— Roadmap Stage 5 (goal #4547), target t27c gen-rust. Closes #9860.The original is a generic wrapper —
ManagedList(comptime T: type)— restoring the Zig 0.14 allocator-with-list API over Zig 0.15's pass-the-allocator-everywhere API.The named missing piece: generics cannot be expressed in this language, so the port instantiates the wrapper's decisions for the concrete element type
u32at a fixed capacity of 16 (original line 17 is the generic; everything it wraps carries). Per the issue's rule ("Port the decision, not the plumbing"), with 7 tests (33 runtime asserts, 0 vacuous, 100% function coverage over 11 functions):ManagedList();?T: an empty list pops nothing, a non-empty one shrinks by one;One generator quirk is worked around in place and commented in the spec: a copy-then-indexed-write-then-return body makes the emitter return the wrong variable, and a trailing alias keeps the return-variable picker on the mutated copy (visible in
managed_list_set).Verification (all run live from the worktree root, zig 0.16.0)
t27c parse: OK.t27c spec-status: IMPLEMENTED.t27c typecheck: 0 errors, 0 warnings.t27c coverage: 11/11 tested (100%) — no transports in this port.t27c test-report: 7 tests / 7 pass / 0 FAIL / 0 BLOCKED, 0 vacuous passes — the empty init, ordered appends with the base list unchanged (value semantics), the capacity stop at 16 of 20 appends, set replacing in place, clear keeping the list usable, the pop ladder down to empty, and the iterator walking to the end and stopping.gen(158 lines, 0 'not yet implemented'),gen-rust,gen-c,gen-verilog.grep -cE '^\s*(pub )?fn (ManagedList)\(': 1.grep -cE '^[[:space:]]*test[[:space:]]+("|[A-Za-z_])': 7 (≥ 1).git status --short— exactly this one file. The repo's lefthook pre-commit passed.dupe_scan: all 11 function names unique across the corpus (checked before the commit); the bare scan reports zero error lines — no new duplicate group, none grew.Dmitrii Fedorov (@dmitrii-f-t27)