hunter / minerva

Scheme interpreter

Clone this repo

  • e0869b7 Rearrange some code by Hunter Praska at 2021-04-11 01:22:36 -05:00

  • a7bc9bf Add support for boolean primitives by Hunter Praska at 2021-04-11 01:06:55 -05:00

  • 06a63a1 Add support for single branch if by Hunter Praska at 2021-04-11 00:49:52 -05:00

  • 950c6f8 Some work on tests by Hunter Praska at 2020-11-28 21:07:06 -06:00

  • c5a91f2 Initial work on error handling in VM by Hunter Praska at 2020-11-28 20:58:33 -06:00

View Log

Akuma

A scheme interpreter

Dedicated to the Nissan Fairlady S30 240z.

TODO

  • real scheme throws error on (= 1 2 't) because of symbol. Our interpreter allows this because it returns when it finds that 1 != 2. Is this only the = function or are all primitives type checked?
  • Support other scheme types, rat, floating point, complex, vectors
    • This mostly requires improving the parser
  • Implement more primitives
  • Support more of r7rs
  • Add quasiquoting with unquoting
  • Emulate racket when displaying quoted values
  • Lazy lists
  • Parallel pipelines? https://adamdrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html
    • https://lparallel.org
  • Browser interaction
    • Webdriver API
  • Module system
  • JIT compilation
    • Maybe look at Cretonne
    • A tiered compiler like SpiderMonkey would be interesting

Priority

  • Macros
  • Rust FFI
  • REPL/environment
  • Continuations
  • Bytecode

stdlib

  • HTTP lib
    • maybe look at Golang's net/http or Common Lisp's Caveman/ningle
    • Should be easy to make requests
    • Should be capable running a server, but maybe doesn't need something akin to RoR
  • Database interaction
    • Should have easy drivers for common databases, Psql, SQLite, etc
    • Should have some key/value store like Golang's Boltdb
  • GUI library
    • Not sure how this will come out, but the picture language in SICP has me interested
    • Look at Common Lisp's McCLIM
  • Text manipulation
    • This includes things like RegEx, fuzzy matching, etc.
    • Important because plaintext is extremely common, useful as a bridge for interacting with UNIX tools
  • De/Serialization
    • JSON is important for interacting with the web

Other

  • Support images?
    • It might be interesting to support images of the environment so that a session can persist between power cycles
  • Run as daemon?
    • Then we might have one session for the whole system, would probably need a way to run subsessions
    • This would require some sort of IPC/RPC