diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2026-06-01 21:49:37 +0200 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2026-06-01 21:49:37 +0200 |
| commit | 724ac8ae394675a78c2977c6e35555b210256e01 (patch) | |
| tree | d7f5574b49ec71341ea8079f18a33b9c17b60221 /docs/c1/2-decode.md | |
| parent | 9ce0aa66cedc985322e06db4bac130910610c113 (diff) | |
docs -> doc
Diffstat (limited to 'docs/c1/2-decode.md')
| -rw-r--r-- | docs/c1/2-decode.md | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/docs/c1/2-decode.md b/docs/c1/2-decode.md deleted file mode 100644 index 379c74b..0000000 --- a/docs/c1/2-decode.md +++ /dev/null @@ -1,44 +0,0 @@ -# Decoding - -A separate process called "decoding" can transform simple data structures, -consisting of only the base datum types, into a richer set of Zisp types. - -For example, the decoder may turn `(#HASH ...)` into a vector, as one would -expect a vector literal like `#(...)` to work in Scheme. Bytevector syntax -could use a custom rune as a list prefix, like: `#u8(...)` - -Runes may be decoded in isolation as well, rather than transforming a list -whose head they appear in. This can implement Boolean constants as `#true` -and `#false` or `#t` and `#f`. - -The decoder recognizes `(#QUOTE ...)` to aid in implementing the traditional -quoting mechanism of Lisp/Scheme, but with a significant difference: - -Traditional quote is "unhygienic" in Scheme terms. An expression such as -`'(foo bar)` will always be read as `(quote (foo bar))` regardless of what -lexical context it appears in, so the semantics will depend on whatever the -identifier `quote` is bound to, meaning that the expression may end up -evaluating to something other than the list `(foo bar)`. - -The Zisp decoder, which transforms not datum to datum, but object to object, -can turn `#QUOTE` into an object which encapsulates the notion of quoting, -which the Zisp evaluator can recognize and act upon, ensuring that an -expression like `'(foo bar)` always turns into the list `(foo bar)`. - -One way to think about this, in Scheme (R6RS / syntax-case) terms, is that -expressions like `'(foo bar)` turn directly into a syntax object when read, -and the created syntax object begins with an identifier bound to `quote` in -the standard library. - -The decoder is, of course, configurable and extensible. The transformations -mentioned above would be performed only when it's told to decode data which -represents Zisp code. The decoder may be given a different configuration, -telling it to decode, for example, data which represents a different kind of -domain-specific data, such as application settings, build system commands, -complex data records with non-standard data types, and so on. - -<!-- -;; Local Variables: -;; fill-column: 77 -;; End: ---> |
