Commit Graph

255 Commits

Author SHA1 Message Date
Brummel 2506180023 plan: 22-tidy.5 strict duplicate-clause detection 2026-05-10 04:25:11 +02:00
Brummel e37d099edb iter 22-tidy.4: journal entry 2026-05-10 04:21:18 +02:00
Brummel 557bf57cdb iter 22-tidy.4: mono::primitive_surface_name delegates to ailang-core 2026-05-10 04:18:46 +02:00
Brummel 5fd95e4e9f iter 22-tidy.4: route 4 matches! sites through is_primitive_name 2026-05-10 04:15:47 +02:00
Brummel 9523a1cd63 iter 22-tidy.4: pin lockstep invariant + tighten module doc 2026-05-10 04:13:41 +02:00
Brummel bbfadb2d72 iter 22-tidy.4: ailang-core::primitives — single home for the primitive-name set 2026-05-10 04:11:29 +02:00
Brummel 0fbc1f72f1 plan: 22-tidy.4 primitive-name-set consolidation 2026-05-10 04:09:57 +02:00
Brummel c3fd1c08a3 iter env-unify.audit: tidy stale Env docs, pin-test docstring; queue types/ctor_index shape 2026-05-10 02:36:27 +02:00
Brummel e414144d48 iter env-unify: journal entry, milestone close 2026-05-10 02:30:34 +02:00
Brummel d7e333fdf7 iter env-unify.2: drop redundant overlay comments 2026-05-10 02:28:54 +02:00
Brummel 2ab9d77113 iter env-unify.2: check_in_workspace consumes build_check_env 2026-05-10 02:26:24 +02:00
Brummel 92b94afa2a iter env-unify.1: rustdoc fixup (re-anchor check_in_workspace doc, drop transient task tag) 2026-05-10 02:19:24 +02:00
Brummel d6870d7a62 iter env-unify.1: extract build_check_env, mono uses it 2026-05-10 02:16:21 +02:00
Brummel cd08f53315 test: fix env-pin globals assertion (builtins seed operators workspace-flat) 2026-05-10 02:14:38 +02:00
Brummel 42a7ed7673 test: clean red signal for env-construction pin (inline module_types) 2026-05-10 02:06:46 +02:00
Brummel d7706dc3ed test: red for env-construction drift-shape pin 2026-05-10 02:03:09 +02:00
Brummel 08abfdf791 plan: env-construction unify 2026-05-10 02:00:41 +02:00
Brummel 1d4a6b4231 spec: env-construction unify — single source of truth for Env shape 2026-05-10 01:47:56 +02:00
Brummel 9db47d2f4e journal: audit — lib.rs gap sites defensive, env.imports gap was the fifth 2026-05-10 01:24:18 +02:00
Brummel a9c685ded8 fix: mono pass seeds env.imports for qualified cross-module refs in class workspace 2026-05-10 01:23:07 +02:00
Brummel 2bf827f600 test: red for mono-pass unknown module prefix on qualified xmod reference in class workspace 2026-05-10 01:19:45 +02:00
Brummel ca8ffe8dc3 journal: bug fix — mono pass env.globals seeding 2026-05-10 01:12:11 +02:00
Brummel 13b36ccb0f fix: mono pass seeds env.globals for recursive top-level fn in class workspace 2026-05-10 01:10:31 +02:00
Brummel 3b0bcf3f65 test: red for mono-pass unknown identifier on recursive fn in class workspace 2026-05-10 01:06:18 +02:00
Brummel 4cacfcbdac bench: mono-vs-vdisp micro-benchmark + revised Decision 11 rationale
Hypothesis-driven measurement of "did monomorphisation actually
buy us performance?" on a 100M-iter LCG hot loop, AILang mono'd
code vs. four C reference variants (direct-inlinable, direct-
noinline, indirect-monomorphic, indirect-polymorphic). Zen 3,
clang -O2, median-of-15.

Headline: H1 supported, but the mechanism is inlining, not
dispatch shape. AILang mono = hand-C direct (1.000x). Indirect-
monomorphic = direct-noinline (1.000x) — saturating branch
predictor makes the indirect-call cost vanish on this hardware.
Inlining is the actual 3.31x win; polymorphic indirect adds
another 21% predictor-miss penalty.

DESIGN.md Decision 11 gains a rationale paragraph reframing mono
as inlining-enabler rather than indirect-call-eliminator, with
explicit pointer to the bench. JOURNAL entry records the full
methodology, ratios, limitations, and the side-effect mono-pass
env.globals-seeding bug surfaced while building the AILang fixture
(separate RED-first debug iter to follow).
2026-05-10 01:03:21 +02:00
Brummel 105ad3fe80 iter 22-tidy: journal entry — milestone 22 closed 2026-05-09 22:52:49 +02:00
Brummel c8fc33fb86 iter 22-tidy.3: prose-lib — drop 22b.4 reference from class/instance placeholder 2026-05-09 22:52:17 +02:00
Brummel cc3f28c053 iter 22-tidy.2: spec — components table reflects 22b.4a/b split + 22c shipped 2026-05-09 22:51:49 +02:00
Brummel e6fe2dfd81 iter 22-tidy.1: DESIGN.md — reconcile Decision 11 with milestone-22 outcome (no Prelude, '__' separator) 2026-05-09 22:51:17 +02:00
Brummel a98da81e32 plan: 22-tidy DESIGN.md and spec drift after milestone-22 close 2026-05-09 22:50:25 +02:00
Brummel ea30b6815d iter 22c: journal entry — milestone-22 acceptance fixture + mono pass user-ADT fix 2026-05-09 22:45:02 +02:00
Brummel 5c5180fc48 fix: mono pass seeds env.types and env.ctor_index for user ADTs 2026-05-09 22:43:54 +02:00
Brummel 59e86b3805 test: red for monomorphise_workspace unknown type on user ADT 2026-05-09 22:41:18 +02:00
Brummel f3c94e554c plan: 22c user-class e2e fixture 2026-05-09 22:37:26 +02:00
Brummel 2102dadb3d spec: 22 — drop Prelude-for-primitives, tighten 22c to existing vocabulary 2026-05-09 22:34:30 +02:00
Brummel 692899867b iter 22b.4a: journal entry 2026-05-09 22:30:17 +02:00
Brummel 0709e319ab iter 22b.4a.6: spec + DESIGN amendments — 22b.4 split, terminology fix, '__' separator, forall-constraints gap 2026-05-09 22:28:17 +02:00
Brummel 9584d1dada iter 22b.4a.5: retire round-trip skip-list for class/instance fixtures 2026-05-09 22:25:32 +02:00
Brummel 2a2e6b9817 iter 22b.4a.4.5: form-a printer+parser arms for Type::Forall constraints 2026-05-09 22:23:10 +02:00
Brummel 5852833241 plan: 22b.4a fix — ail render has no --form flag 2026-05-09 22:19:32 +02:00
Brummel 9784fe95fe iter 22b.4a.4: form-a printer arm for InstanceDef 2026-05-09 22:14:59 +02:00
Brummel 0456393b85 iter 22b.4a.3.fix: drop unused InstanceMethod import + indent stub + dedup test imports 2026-05-09 22:13:23 +02:00
Brummel dd9614cae9 iter 22b.4a.3: form-a printer arm for ClassDef 2026-05-09 22:10:35 +02:00
Brummel da1746229d iter 22b.4a.2: form-a parser arm for InstanceDef 2026-05-09 22:05:49 +02:00
Brummel a1b4cd0063 iter 22b.4a.1.fix: drop test comments narrating plan deviations 2026-05-09 22:03:27 +02:00
Brummel eb06f3bfcc plan: 22b.4a fix — int literals are bare tokens, not (lit (int N)) 2026-05-09 22:00:55 +02:00
Brummel fefaa03c76 iter 22b.4a.1: form-a parser arm for ClassDef 2026-05-09 21:59:29 +02:00
Brummel fdf0de5de7 plan: 22b.4a form-a parser+printer arms for ClassDef/InstanceDef 2026-05-09 21:55:25 +02:00
Brummel eef5197f75 iter 22b.3: JOURNAL — monomorphisation pass shipped, e2e gate green 2026-05-09 21:37:51 +02:00
Brummel 090f082215 iter 22b.3.tester: e2e for coherence, default-keyword, cross-module mono
Adds three end-to-end tests for the 22b.3 mono pass, each with a
matching one-property fixture under examples/. Defends mono-pass
invariants 3, 4, and 6 from docs/specs/2026-05-09-22-typeclasses.md
at the binary level (stdout-asserting, not AST-asserting):

- coherence_two_instances_pick_correct_body_at_runtime — class R
  with instances at Int and Bool, both reachable from one main.
  Stdout `11\n22` proves both mono fns are synthesised AND each
  call site picks the matching body (no collapse).

- class_default_method_runs_and_prints_default_value — empty
  instance body + class-level `default` clause must lower, link,
  and print the default value (`99`). Promotes the existing
  synthesise_mono_fn unit test to a binary-level guarantee.

- cross_module_class_method_runs_and_prints_correct_value —
  class+instance in module A, called from module B's main. The
  qualified-name rewrite + cross-module synth-def placement was
  AST-tested in 22b.3.6; this pins down the emit-and-link path.

All 18 typeclass_22b3 tests pass; full workspace green; 3 bench
gates 0/0/0.
2026-05-09 21:36:15 +02:00