Skip to content

Latest commit

 

History

History
49 lines (38 loc) · 1.72 KB

TODO.md

File metadata and controls

49 lines (38 loc) · 1.72 KB

Missing features

  • R7RS multi-line comments
  • R7RS "datum comments"
  • Proper string escape syntax, instead of using JSON's rules
  • Serde support
  • Syntactic sugar for quote, quasiquote, unquote and unquote-splicing
  • Support for characters
  • Support for vectors
  • 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

  • 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!