66fce31dbd
The prelude is lib/prelude.fln, embedded at build time and read by the indented reader.
2026-09-26 16:37:02 +07:00
8afa054349
Merge master into the .fln optionals lane.
2026-09-26 15:52:00 +07:00
6c6b5a60cb
?? continues a line, a chain or an unwrap is no place to assign, nested marks and a ? on a value say what to write, a lowercase type takes ?, and a predicate reads as a word with its name beside it.
2026-09-26 15:36:49 +07:00
178c129c97
A .fln name carries no ? or !, and .fln has T?, x ?? d, x!, if let over a plain name and a?.b chaining.
2026-09-26 14:54:58 +07:00
7db1a81d1f
Builtins, prelude, vendor and raylib predicates are named with is- or has- and no name carries a ? or !.
2026-09-26 14:34:36 +07:00
fd8620516c
A char literal is a typed char unless typed code wants a number, and a char compares, hashes, converts with (i32 c) and a checked (char n), and crosses into dyn as a dyn char.
2026-09-26 13:49:02 +07:00
ef87bdb3b3
A prelude text builder checks its own String as a backstop, and a direct call checks the text it passes first, at the caller's line.
2026-09-26 12:29:59 +07:00
bfdd971baa
A String compares equal to a String or a str by its bytes, and a prelude builder's String is checked at the caller's line.
2026-09-26 12:22:17 +07:00
db67ab19b4
String is owned, growable, always-valid UTF-8 text over a (Vec u8), and the prelude's text builders return it.
2026-09-26 12:07:11 +07:00
49e6ac6512
Comments and the README example spell the text type str.
2026-09-26 05:39:56 +07:00
267db2cd91
The typed read-only text type is spelled str, and string is refused with that fix.
2026-09-26 05:22:24 +07:00
4b1e722854
slice-from makes a slice from a pointer and any integer count, and ((Ptr U) p) casts a pointer's element type without dropping const
2026-09-25 22:24:11 +07:00
4c336687ef
Master's error recovery is merged, and the refusal memos are consulted only where a refusal is raised
2026-09-25 17:03:32 +07:00
f32f88413e
Merge branch 'master' into worktree-agent-a4f010dac78379ee2
2026-09-25 16:20:22 +07:00
729d1a27ed
map-keys and map-values walk a Map of closures, since (map-next m cur k) walks keys alone and neither needs a zeroed value, and nothing names spike/ any more
2026-09-25 16:10:20 +07:00
9a91440486
C-c C-s installs a defn that stops before each form of its body, and the break buffer steps it with s and runs the rest of the call with c
2026-09-25 15:43:24 +07:00
0f0fbc68ef
The prelude's generics name their element types with the sigil, so a program global named t, k or v no longer breaks them
2026-09-25 15:26:29 +07:00
f6ba1e6c4d
A CFn may sit in a struct field, a fixed array or a global, and a call through a null one signals NullCall on both backends
2026-09-25 15:26:27 +07:00
8cc63ed9f6
A place in update, ++ and -- evaluates each of its subexpressions once, and (update place f args ...) stores (f old args ...) back into it
2026-09-25 15:26:27 +07:00
5b8c4a68fa
into refuses to copy elements that own storage as they stand, and names (map clone) where clone takes the element
2026-09-25 15:22:44 +07:00
6745aa7cb4
map-keys and map-values are prelude generics over any hashable key
2026-09-25 15:17:05 +07:00
610e9fcf9d
A parent's handler reads a name and message made in context/temp, whole and good until the frame ends, and the handler-case landing no longer holds a buffer of its own
2026-09-25 14:36:46 +07:00
5646ae148e
Merge master; an expression evaluated at a stop runs against a scratch temp arena that is wiped after it, and the program's own temp arena is never rolled back
2026-09-25 14:09:30 +07:00
b2eb81f7bf
A slice or pointer can be read-only, and what it reaches cannot be written through it
2026-09-25 13:39:04 +07:00
d2f25a6e44
Merge branch 'master' into worktree-agent-a9288676abb278ffb
2026-09-25 13:35:10 +07:00
02e4fef830
i64->bytes and f64->bytes allocate from a growing temp allocator that (free-temp) releases once a frame and a dev build's agent poll wipes, so a number drawn every frame no longer leaks
2026-09-25 13:07:21 +07:00
325c3662a8
A numeric type's limits are (max-value T) and (min-value T), and an array literal of numbers with no common type is refused with the conversion named
2026-09-25 12:56:02 +07:00
bfd176cce9
Merge master: a handler clause runs without its own handler in force, over the condition descriptor, and StaleCall is an Error
2026-09-25 12:50:01 +07:00
acec25f8a1
Merge master
2026-09-25 12:43:50 +07:00
aedd50c646
Merge branch 'master' into worktree-agent-ac750a5e83cab251b
...
# Conflicts:
# lib/check.ml
2026-09-25 12:17:58 +07:00
73dfaacbc8
A condition type may name a parent and a handler for Error catches every built-in error, a signal passes one descriptor carrying its chain, name, sentence and site, and the break loop shows the sentence the runtime wrote
2026-09-25 12:05:13 +07:00
6e8cc52bc7
Merge branch 'master' into worktree-agent-ad097f67134ba0552
2026-09-25 12:02:48 +07:00
5c0698d749
(max-of T) and (min-of T) are a numeric type's limits, at a concrete type or a type variable the bound admits, and given a slice they are still the prelude's reductions
2026-09-25 12:00:42 +07:00
c9eb425ed1
A number i64->bytes or f64->bytes renders is copied into the context allocator and outlives the frame that made it
2026-09-25 11:47:01 +07:00
2ff1da88da
A slice can be read-only: bytes-view answers a [const u8], and a store through one is refused at compile time
2026-09-25 11:43:41 +07:00
3cb6cebdbe
(- x) negates a typed number, a type variable and a dyn, and a float's negation of zero is -0.0
2026-09-25 11:37:56 +07:00
9e26275f9b
A quasiquote nests as SBCL's does, a match takes an enum, and until is a prelude macro
2026-09-25 11:27:14 +07:00
de26d6e625
~~@xs splices an unquote per element, a session can call a macro an expansion defined, and an enum member cannot be named else
2026-09-25 11:24:27 +07:00
d03b02b347
Merge master
2026-09-25 11:12:30 +07:00
0d771494a6
Merge branch 'master' into worktree-agent-a8f5ad274482eeb9c
2026-09-25 11:07:02 +07:00
08545c757f
cond is a special form again because the prelude relies on it, and until is a prelude macro because only programs use it
2026-09-25 10:48:40 +07:00
39d35f51db
A function whose signature changed installs, and a caller compiled against the old one stops on StaleCall at the call
...
A dev cell carries its body's signature word beside the body, every call through a cell (and every function value taken from one) compares it with the word the site was compiled for, and the session lists the stale callers by file and line on the reply. Both backends, both installers; release builds have neither the word nor the compare.
2026-09-25 10:40:18 +07:00
7abe760288
cond and until are prelude macros, and a macro module holds only the macros its forms reach
2026-09-25 10:28:32 +07:00
4a292b5a73
f64-inf, f64-nan, f32-inf and f32-nan are constants the compiler supplies
2026-09-25 10:07:22 +07:00
cb0be62087
An integer written at or above 2^63 is a u64 and nothing else, and vec-new reads a type from its argument only when the builtin is what was called
2026-09-25 07:43:24 +07:00
3a3674efb7
A gensym is never the same name twice in one compiler process, however many macro modules it loads
2026-09-25 07:04:10 +07:00
6b9d1fa644
A cast of NaN or an infinity to an integer says so by name, on both backends
2026-09-25 06:58:06 +07:00
45cc4d20e8
One file holds what five did
...
# Conflicts:
# FIX.org
2026-09-21 21:07:40 +07:00
57fe91f303
Five records become one, and every citation lands somewhere
...
FIX.org, NEXT.md, DISCUSS.org, docs/DISCUSS.md and the session handoff at the
root are one TODO.org now: 293 entries under seven subsystem headings, each
carrying an org keyword that says where it stands. A DONE entry is a few lines
saying what was decided and what that rules out; the reasoning that would not
compress — the embedding spike and the four reports the hand-written x86
backend was built from — moved into docs/BUILT.md instead, and its entries
point there in one line.
Every entry was checked against the tree before it got a keyword, and the
prose was wrong in both directions. Things the deleted files called open were
built: the first-evaluation stall, main being redefinable, macro parameter
lists, the type-limit constants, the array constructors, the byte fills,
inc/dec, the discard's fontification, the Emacs buffers, rt_die's _exit, the
backtrace surface, and the acceptance failure that could print and still exit
zero. Things they called done were not: the backend reports' no-plan buckets
had gone stale in the other direction, the value-dependent defvar was
superseded rather than built, and macro-expansion source locations are on an
unmerged lane, so that entry is NEXT and names the branch.
Every comment that cited one of the five by name now cites a heading that
exists, in TODO.org or in docs/BUILT.md. The session reports under
docs/handoffs/ keep naming the files they worked on, because rewriting them
would falsify what those sessions did; each carries a note saying where the
content went.
2026-09-21 21:05:48 +07:00
Joseph Ferano
a14a872a44
A form a macro splices through is reported on the line it was written on
2026-09-21 19:16:45 +07:00