- Implement core functions: time-ms, conj, string?, number?, fn?, macro?, seq
- Add stubs for meta and with-meta
- Implement more type checking functions to Type
- Int type holds an i64 instead of an i32
- Self-hosted MAL implementation achieved!
- Add stubs for step A mandatory definitions
- Fix swap to accept variable number of arguments
- Add *host-language* symbol to the REPL
- Fix unbalanced string detection
- Improve IOError messages
- Fix rest core function
- Implement readline core function
- Implement new core functions: symbol, keyword?, keyword, vector?, vector, sequential?, hash-map, map?, assoc, dissoc, get, contains?, keys, vals
- Implement apply core function
- Implement map core function
- Add predicate functions: nil?, true?, false? and symbol?
- Implement try*/catch* special forms and throw core function
- Add error module to implement basic exceptions
- Convert all string errors to exceptions
- Add cond macro to core mal definitions
- Implement Clojure-style variadic function parameters
- Implement nth, first, rest core functions
- Improve closure printing
- Add is_macro attribute to closure type
- Add new special form defmacro!
- Add is_macro_call function
- Add macroexpand function
- Use macroexpand before special form switch in eval
- Add macroexpand special form
- Implement the core function vec
- Improve quasiquote and add vec in its processing
- Implement quoting related reader macros
- Implement quasiquote and quasiquoteexpand special forms
- Improve code using clippy suggestions
- Implement quote special form
- Implement cons and concat core functions
- Add step 7 mal tests
- Add ability to run mal programs by command line and add *ARGV* symbol
- Implement @ macro
- Fix bug with string functions
- Add MAL tests and test runner (runtests.py)
- Move escape and unescape string functionality into a utils module
- Add error checking to reader to make sure parens are properly matched
- Fix wrong behavior while reading comments
- Read functions handle errors and return a Result
- Implement atom, atom?, deref and reset! functions
- Print atom as (atom X)
- Implement swap! function
- Implement Atom type
- Add doc to Env public functions
- Comments are detected in reader.read_str instead of read
- Definitions using the interpreter itself are read from a file
- Add load-file to core.mal definitions
- Fix eval to use the outermost environment
- Update Env to use RefCell on data and not in outer.
- Remove RefCell wrapping the REPL env
- Implement read-string function
- Implement slurp function
- Implement eval as a new symbol in the REPL
- Implement tail call optimization in eval
- Implement HashMap type
- Implement String type
- Add lazy_static crate and use it for regex compilation
- Implement string functions: prn, println, pr-str, str
- Add comment support to the interpreter. Lines starting with ; are considered comments and ignored.
- Implement Keyword type
- Fix Vector functionality to be used as List
- Implement PartialEq for Type
- Implement convert_to_vec in Type and update is_empty, count and = functions to work with Vectors
- Implement not using the interpreter itself
- Implement Vector type
- Implement core functions: prn, list, list?, empty?, count, =, <, <=, >, and >=
- Add core module with Namespace struct and arithmetic functions (+, -, *, /)
- Env derive Clone
- The REPL environment is wrapped with Rc and RefCell
- Implement fn* and the Closure type
- Use Rc in Env outer environment instead of references with lifetime
- Update Env::new to take two new parameters: binds and exprs
- Split tests in multiple files
- Add support to printer to print function values
- Add print_readably argument to print
- Implement do, if
- Add env module with Env type
- Use env as REPL environment instead of a HashMap
- Pass REPL env as argument to rep function
- Implement def!
- Implement let*
- Add Float type
- Basic arithmetic operations work with ints and floats
- Add REPL environment with arithmetic operations
- Implement basic eval
- REPL ignore blank lines
- Remove Ast type and use Type instead
- Rename MalType to Type
- True and False are now inside the Bool type
- Rename Integer to Int
- Add initial types (types module) and AST type
- Add basic lexical and syntax analysis. Read nil, true, false, integers, symbols and lists. (reader module)
- Add printing capabilities (printer module)
- Add stub read, eval, print functions
- Add test generator from MAL text tests
- Implement a REPL in main