diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2026-06-20 22:53:50 +0200 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2026-06-20 22:53:50 +0200 |
| commit | b84ed4f563b3536365f7d3cc4d068407e98685b3 (patch) | |
| tree | 9ab7b18d712db1329b6230cb45520e7c85dc46fd /doc/c1/2-decode.md | |
| parent | bfaa74b19fc81dbe071d55566a78a8e329237eff (diff) | |
Diffstat (limited to 'doc/c1/2-decode.md')
| -rw-r--r-- | doc/c1/2-decode.md | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/doc/c1/2-decode.md b/doc/c1/2-decode.md deleted file mode 100644 index 379c74b..0000000 --- a/doc/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: ---> |
