16 Commits

Author SHA1 Message Date
9d6784f2cd Write down what was read, what was refused, and what it cost
BUILT.md gains "The header is read now", directly under the section whose last
paragraph promised that reading a header was what would convert the trusted
half into a checked one and that it was not built. That sentence is replaced by
a pointer to the one below it, in BUILT.md and in shim.ml's docstring both.

It records the things worth not re-deriving: why the dump and not libclang (and
that Zig left libclang too, which strengthens the argument rather than weakening
it), why the import is bounded by the package's own defstructs, why generating
defstructs would make the check circular in exactly the way a _Static_assert
was rejected for, refusal-by-demotion from Zig's failDecl, the naming rule and
what it must actually guarantee, and both const-vs-non-const char * and the
target-varying widths.

The diff and the costs are stated as measurements, with the table: 16 of 16
defstructs and 172 of 172 declare-c agree against 5.5, ten real differences
against 5.1-dev, release +4ms warm, redefinition 31.0 -> 46.5ms.

DISCUSS.md item 6 is rewritten rather than removed. The mechanism question is
settled and is now in BUILT.md; what is left is narrower and is two decisions
that are the author's — whether the header stays a build-time read or becomes a
committed generator, and whether the 172 hand-written lines migrate. Both have
the argument on each side written out, including what migration would lose:
key-pressed? is a better name than is-key-pressed, and an enum parameter
imports as i32 because nothing tells the importer the package calls KeyboardKey
"Key".
2026-09-12 16:17:30 +07:00
a3fccf440c Handle is the gate on classes, and the allocator just made it buildable 2026-09-12 14:08:20 +07:00
03692c35b5 clojure-mode is the reference to port from, not an ancestor to inherit 2026-09-12 14:06:38 +07:00
f2d80ce8c0 Borrow clojure-mode's binding alignment without inheriting its assumptions 2026-09-12 14:05:40 +07:00
394b656a68 Indentation falls through to Emacs Lisp inside a binding vector 2026-09-12 14:04:10 +07:00
693661c4dd Reading a header need not mean linking libclang 2026-09-12 14:01:12 +07:00
99db8ce73f A JS backend is for web apps, which makes object mapping the right shape 2026-09-12 13:58:29 +07:00
c49286ca01 Structural identity is not implicit conversion, and writability decides the layout question 2026-09-12 13:56:24 +07:00
95b4f1173b Structural typing is a front-end question, except for field order, which is layout 2026-09-12 13:53:44 +07:00
a8a032e340 Three roles want three words, and two of them want the same dependency tracking 2026-09-12 13:51:40 +07:00
f1223cde2e -O0 follows the source and -O2 need not, and what SBCL gets for owning its code 2026-09-12 13:41:34 +07:00
b97a3dbbf1 The inspector walks expressions, which is why it cannot see a frame 2026-09-12 13:36:34 +07:00
f4f61ae8c9 Two questions became decisions, so they move to what is left 2026-09-12 13:30:15 +07:00
244f83fe53 Globals are program state, so they get a section rather than a frame 2026-09-12 13:27:27 +07:00
f231f62f52 Globals go per frame; watching is its own question 2026-09-12 13:26:38 +07:00
ce9ea2f268 Nine questions asked and not answered, with what is already known about each 2026-09-12 13:04:38 +07:00