The REPL renderer is most of println
plan.org puts a compiler-provided, type-directed println at milestone 5: a structural printer selected or emitted per concrete instantiation, Ptr printed as an address rather than followed, depth and length bounded. That is a description of the renderer C-x C-e already has - same walk, same refusals, the same three bounds - pointed at flan_dev_emit and the wire instead of at stdout. Recorded next to the renderer so it is not built a second time. What println needs on top is a stdout sink, a builtin that takes its printer from the argument's type, and the any/Error cases, which have no compile-time type to walk.
This commit is contained in:
parent
f55ec0a0b8
commit
55d7c2fae8
11
NEXT.md
11
NEXT.md
@ -791,6 +791,17 @@ socket. The read is safe without a handshake because `flan_dev_result` bumps a
|
|||||||
generation counter last; the daemon waits for it to move rather than assuming
|
generation counter last; the daemon waits for it to move rather than assuming
|
||||||
the program has reached a frame boundary.
|
the program has reached a frame boundary.
|
||||||
|
|
||||||
|
**This renderer is most of `println`**, which is worth knowing before anyone
|
||||||
|
schedules it. plan.org describes a compiler-provided, type-directed intrinsic
|
||||||
|
that selects or emits a structural printer per concrete instantiation, prints
|
||||||
|
structs, fixed arrays and options structurally, prints a `Ptr` as its address
|
||||||
|
rather than following it, and bounds depth and length. That is a description of
|
||||||
|
what `Session` already does for `C-x C-e` — same walk, same refusals, same
|
||||||
|
three bounds — aimed at `flan_dev_emit` and the wire instead of at stdout. What
|
||||||
|
`println` needs on top is a stdout sink, a builtin that takes its printer from
|
||||||
|
the argument's type, and the `any`/`Error` dynamic cases, which have no
|
||||||
|
compile-time type to walk. Not the walk itself.
|
||||||
|
|
||||||
The renderer is a **compile-time walk over the type**, emitting a piece at a
|
The renderer is a **compile-time walk over the type**, emitting a piece at a
|
||||||
time through `flan_dev_emit`. Piecewise because a struct is its fields with
|
time through `flan_dev_emit`. Piecewise because a struct is its fields with
|
||||||
punctuation between them, and concatenating that in generated IR would need an
|
punctuation between them, and concatenating that in generated IR would need an
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user