<feed xmlns='http://www.w3.org/2005/Atom'>
<title>moon/zygotec/examples, branch work/uninit-locals</title>
<subtitle> work-in-progress programming language.
</subtitle>
<id>https://git.downsta.ir/moon/zygotec/atom?h=work%2Funinit-locals</id>
<link rel='self' href='https://git.downsta.ir/moon/zygotec/atom?h=work%2Funinit-locals'/>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/'/>
<updated>2026-10-15T18:58:06+00:00</updated>
<entry>
<title>uninit: track aggregate fills per part, sticky computed-index fills, &amp;a[k] and method calls set the aggregate; fix test/example hits; docs</title>
<updated>2026-10-15T18:58:06+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-15T18:58:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=5a4dc62a79af6135c7050e81a82dbfdfb0a7d4e0'/>
<id>urn:sha1:5a4dc62a79af6135c7050e81a82dbfdfb0a7d4e0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>examples/actors_demo: print the fan-out replies in worker order, not arrival order (the x86-64 jit vs interpreter check flaked on it under load)</title>
<updated>2026-10-15T16:53:23+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-15T16:53:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=35538c83c1f9f9c95a850a2b4a78002c5b467653'/>
<id>urn:sha1:35538c83c1f9f9c95a850a2b4a78002c5b467653</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: hold blocks in LEARN.md (36-hold), spec 5.16, ACTOR.md; TODO: m:n scheduler and follow-ups</title>
<updated>2026-10-15T11:06:10+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-15T11:06:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=24a21f7520ce91681e573833b7f33156e308964a'/>
<id>urn:sha1:24a21f7520ce91681e573833b7f33156e308964a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>std: add std.Io (print, println, nl, put_*, put_f, get_c, eof, read, getline) with test, learn example and docs</title>
<updated>2026-10-15T06:12:25+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-15T06:12:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=de4da84ca3159ad0ebcf13729716be5f4d7bbc2a'/>
<id>urn:sha1:de4da84ca3159ad0ebcf13729716be5f4d7bbc2a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>merge work/exactsize: exact-size heap bounds</title>
<updated>2026-10-14T16:06:30+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-14T16:06:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=7e9abb014169b77cba5174ae92ddc3d1eca4d667'/>
<id>urn:sha1:7e9abb014169b77cba5174ae92ddc3d1eca4d667</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rt: exact-size heap bounds; n, the words new asked for, lives in bits 32..62 of p[-4]</title>
<updated>2026-10-14T15:05:03+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-14T15:05:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=433fb8cb71e98bbfd579fb43dbc0eac0a60bae73'/>
<id>urn:sha1:433fb8cb71e98bbfd579fb43dbc0eac0a60bae73</id>
<content type='text'>
the bnd recipe and paylen read n instead of the power-of-two block:
  bnd:    r6 = sub p 3; r6 = ld r6; r7 = xor p 0x2B7E1516; r6 = eq r6 r7;
          r7 = sub p 4; r7 = ld r7; r7 = shr r7 32; r7 = mul r7 q;
          r8 = mul i m; r8 = ltu r8 r7; r8 = xor r8 1; r0 = and r6 r8
  paylen: return p[-4] &gt;&gt; 32
two loads instead of three; osize, bchk, release, recycle and the memdebug
leak report all read n (rt.new(4) has length 4, rt.new(0) has 0).

writers: new_raw and new_k set n; stack.h line 87 and tinyvm.ts (BigInt) set
it on stack segments. release clears n when a block goes into quarantine
(len 0, indexing traps; under memdebug bchk reports a use after free); every
free-list path (fpush, mkblock, bdrop, recycle_leaf, balloc hold) rewrites
the word as k &lt;&lt; 16, and an array that grows gets a fresh block. a request over
2^31-1-HDR words stops in new_raw (oom), and the compiler only takes the
new_k fast path for constant sizes that fit, so n is never truncated.

bit users checked (all mask or preserve bits 32..62; none compares or copies
the whole word): gc mark and sweep; release, free, recycle, recycle_leaf;
share and own; isobj, quar, checkptr, obj_base; bclass and the bfree buddy
merge; balloc, mkblock, fpush, funlink, heap_grow; frame_grow; stack_allocate
in src/core/stack.h and src/js/tinyvm.ts; micro.c and core.c (check word
only); the compiler's two p[-4] | F_INTERNAL writes (base.zc, builtins.zc).
32-bit ports: none (baremetal, wasm and micro use int64 Cell).

tests: tests/programs/exactsize.zc (n-1/n for non-power-of-two sizes, new(0),
packed bytes, recycle, grow, stack growth); 8-runtime: exact_size_bounds,
pointer_index_n_minus_1, pointer_index_n_traps, pointer_index_n_traps_memdebug,
new_zero_index_traps, new_too_big_traps, stale_index_after_free_traps,
stale_index_after_free_memdebug. expectations changed: leak report shows n
(tests/test.sh line 169, examples/learn/13-memdebug.out, docs/LEARN.md,
4-statements/memdebug_report_line.zc). programs adjusted to keep test.sh
expectations: quarantine.zc (unbounded), bounds_heap.zc (rt.new(11)).
spec 3.7.4 and 4.11 updated. fixpoint 402204 words (main 402197).
</content>
</entry>
<entry>
<title>examples: actor demo</title>
<updated>2026-10-14T14:48:11+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-14T14:48:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=0a67504c1715c5865e7fc646980b153ef346e601'/>
<id>urn:sha1:0a67504c1715c5865e7fc646980b153ef346e601</id>
<content type='text'>
</content>
</entry>
<entry>
<title>zc: add the defer statement</title>
<updated>2026-10-14T10:39:47+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-14T10:39:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=54b8a8918bb63c98a8f58e823033232243647562'/>
<id>urn:sha1:54b8a8918bb63c98a8f58e823033232243647562</id>
<content type='text'>
defer expr; and defer { ... } register code that runs when the enclosing
block ends: at the end of the block, and at return, break and continue
that leave it. the tokens are kept at the defer and compiled again at each
exit (block_close, body, kw_return, kw_break, kw_continue), newest first,
before the block's variables are released, so the analyzer sees a deferred
rt.free(p) as the transfer of p where it runs. names mean what they meant
at the defer; values are read when it runs. return, break and continue
inside a deferred statement are errors, reported once. works in unchecked
code and closures (own base per function context).
</content>
</entry>
<entry>
<title>document the standard library api</title>
<updated>2026-10-14T09:32:37+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-14T09:32:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=35adc61f0b3d9e5748102df77655b90fa29eeb36'/>
<id>urn:sha1:35adc61f0b3d9e5748102df77655b90fa29eeb36</id>
<content type='text'>
every public declaration in src/lib/std.zc has a comment directly above it,
so the language server can show it. comments only; no code changed. the
comments now match the bodies: Host.env and Bytes.env report the characters
copied (at most n - 1), capture drops output past 256 characters, and Buf.set
can raise the length past the current end.

adds examples/std_tour.zc, which calls one or two functions from each group,
and points the README standard-library section at it.
</content>
</entry>
<entry>
<title>todo: one sorted list of open work; library suggestions without naming libraries</title>
<updated>2026-10-14T09:07:12+00:00</updated>
<author>
<name>zinc</name>
<email>zinc@downsta.ir</email>
</author>
<published>2026-10-14T09:07:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.downsta.ir/moon/zygotec/commit/?id=fd622c51be670bba2acf4b50c548acedbc8bb263'/>
<id>urn:sha1:fd622c51be670bba2acf4b50c548acedbc8bb263</id>
<content type='text'>
TODO.md ticks the items verified done (namespaces, actor and icon libraries
and their coverage, the genome embed, the bootstrap ownership limits, the
docs and fixtures sweep) and lists everything still open, including the
newly requested language features, sorted easiest first.

the compiler no longer names actor: file libraries for suggestions come from
src/lib/modules.txt, and lib.name before its include reports the missing
include. icon gains fixtures for reading globals while stepping and for
begin_function on a non-function, and the suite checks that nothing the
compiler reads by default mentions actors. bf.zc, the web sample and std's
capture example use qualified runtime names; LEARN.md uses build/bin paths.
</content>
</entry>
</feed>
