# Missing features - [ ] R7RS multi-line comments - [ ] R7RS "datum comments" - [X] Proper string escape syntax, instead of using JSON's rules - [X] Serde support - [X] Syntactic sugar for quote, quasiquote, unquote and unquote-splicing - [X] Support for characters - [X] Support for vectors - [X] Support for byte vectors - [ ] Pretty-printing ## The `sexp` Macro - [ ] Quote syntactic sugar - [ ] Unquote-splicing - [ ] Improve error reporting ## Lisp dialects - [ ] Scheme (R6RS, R7RS, Guile/Racket extensions) - [ ] Emacs Lisp - [ ] Common Lisp ## Numbers - [X] Different bases - [ ] Scheme numeric tower (complex numbers, rationals, bignums) - [ ] NaNs and infinities (fixup `from` implementations vs. `from_f64`) ## Architectural considerations - [ ] Split off the low-level part of the parser into its own module (or even crate), using an event-based API. This should allow for efficient implementation of the Serde deserializer. See [`yaml_rust::parser::Parser`] for an example and [`serde_yaml`] for an example of how that might look like. A reason for splitting this functionality into its own crate might be that the functionality can the re-used for, say, a Lisp implementation which does not use `lexpr::Value` as data representation, and hence does not need all the related code in `lexpr`. The same reasoning might apply to the printing API. It might be a good idea to code some benchmarks before doing the restructuring to ensure it doesn't affect performance too much -- let's put that "zero-cost abstractions" concept to the test! [`yaml_rust::parser::Parser`]: https://docs.rs/yaml-rust/*/yaml_rust/parser/struct.Parser.html [`serde_yaml`]: https://github.com/dtolnay/serde-yaml/blob/master/src/de.rs