21 pages

Jock reference

Generated from the compiler and its corpus. Every table is projected from a normative spec, every program is extracted from a vector that runs on each push, and every page says what it cannot pin.

Writing Jock

What the language offers and how it is spelled.

Keywords

All 30 keywords, each with its syntactic slot, its precedence where it has one, a working program that uses it, and the language.md rules that define it.

keywords/ — the page · keywords.md — the same content as raw Markdown

The surface grammar

14 productions drawn as railroad diagrams, projected from the parser and checked against it on every run — the precedence chain, the adjacency law, and the spellings that exist in order to refuse.

grammar/ — the page · grammar.md — the same content as raw Markdown

Literals and names

15 literal forms, the utterable aura set, the 41 reserved type names and the 2 builtin functions — which is worth stating plainly, because everything else arrives through import.

literals/ — the page · literals.md — the same content as raw Markdown

Worked examples

39 complete programs with the values tools/examples.sh pins on every push. The 14 shortest are shown in full.

examples/ — the page · examples.md — the same content as raw Markdown

Deliberate absences

6 things Jock does not have, each stated as a rule that refuses. The only part of a language a reader cannot guess at, so it is written down.

absences/ — the page · absences.md — the same content as raw Markdown

When it refuses

The compiler talking back, and what it means.

Negative transfer

23 refusals that exist to catch a habit from another language, each quoting the compiler’s own correction. Start here if Jock rejected something that would be correct Rust, Swift or Hoon.

transfer/ — the page · transfer.md — the same content as raw Markdown

Refusal tags

All 201 refusals the compiler can raise: 162 with the minimal program that triggers one, 30 pinned only by an AST-level vector, 9 pinned by nothing at all.

tags/ — the page · tags.md — the same content as raw Markdown

Driving the compiler

Reading its output from a program.

Machine interface

jockc.sh --diag emits one JSON object per run, with a schema corpus vectors pin by asserting the whole string. Parse this rather than the human output.

machine/ — the page · machine.md — the same content as raw Markdown

What it offers

The library, and where its boundary is.

The standard library

10 modules under lib/, 146 public declarations, 119 of them pinned by an example that runs on every push. One page per module, one section per arm, and the three-tier ruling that says where new code goes.

stdlib/ — the page · stdlib.md — the same content as raw Markdown

What it becomes

The noun on the other side of the compiler.

Erasure and lowering

How each type erases to a noun, and what each sugar form rewrites to. Types erase totally — a running Jock program knows nothing about its own types.

erasure/ — the page · erasure.md — the same content as raw Markdown

The pinned ABI

37 pinned arms with signatures and vectors, the 22 prelude traits with their methods and existing impls, and how an operator resolves.

abi/ — the page · abi.md — the same content as raw Markdown

The specs themselves

These pages are projections of six normative documents, and those are mirrored at /spec/ with an anchor on every rule — so a citation anywhere here is a link into the rule that states it. Where a page and a spec disagree, the spec is right and the page is a bug.

For an agent

Every page has a .md sibling that serves as raw text: /reference/keywords.md, /reference/tags.md, and so on. Those are the same content, generated from the same block list, and are what a retrieval layer should fetch.

Each section is written to stand alone — no "see above", no narrative dependency on a section a chunker might not return — and each repeats the one adjacent fact it needs.

What generates this

tools/refgen.py in the compiler repo. It reads the $keyword and $jpunc molds, the ~| refusal sites and +$ diag, the prelude source, the built corpus (value.jam), the examples/ directory, and the normative tables in docs/spec/. --check regenerates and fails on a diff, so these pages cannot drift from the compiler without a lane going red.

It invents nothing. Where a fact has no vector behind it, the page marks it unpinned rather than stating it quietly.