Skip to content

dhconnelly/june-old

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# june

a compiler and vm for a small lisp implemented in c++

## example

    (define (fib n)
        (if (< n 2)
            1
            (+ (fib (- n 1)) (fib (- n 2)))))

a longer example demonstrating all language features found at `fib.lisp`

## prerequisites

bazel: https://bazel.build/install or `brew install bazel` on mac

## building

    bazel build //src:june

## usage

supports both interactive and batch execution:

    ./bazel-bin/src/june [file]

## running tests

    bazel test //test/...

## status

under active development

## TODO

features:

- [x] booleans
- [x] integers
- [x] if
- [x] let
- [ ] define
- [ ] assert
- [ ] lists and cons car cdr nil nil?
- [ ] lambda and function calls
- [ ] arithmetic and logical built-ins
- [ ] garbage collection
- [ ] support compile-only and execute-only modes
- [ ] add disassembler
- [ ] strings and string manipulation
- [ ] write i/o example (sorted word counts)
- [ ] add i/o support

tech debt:

- c++: audit const, member initialization
- c++: refactor values to std::variant
- c++: improve (de)serialization interfaces
- c++: use std::span instead of std::vector parameters
- c++: use more stl algorithms
- c++: use concepts?
- error handling: move error factories out of classes
- error handling: use more diverse error types
- error handling: improve error propagation
- error handling: better error messages when parsing exprs
- vm: move interactive mode setting to vm
- compiler/vm: create instruction abstraction

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published