diff --git a/README.md b/README.md index ab0ac4d..71ef21e 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,24 @@ # Schala - a programming language meta-interpreter Schala is a Rust framework written to make it easy to create and experiment -with multipl toy programming languages. It provides a cross-language REPL and +with multiple toy programming languages. It provides a cross-language REPL and provisions for tokenizing text, parsing tokens, evaluating an abstract syntax -tree, and other tasks that are common to all programming languages, as well as sharing state -between multiple programming languages. +tree, and other tasks that are common to all programming languages, as well as +sharing state between multiple programming languages. -Schala is implemented as a Rust library `schala-repl`, which provides a -function `start_repl`, meant to be used as entry point into a common REPL or -non-interactive environment. Clients are expected to invoke `start_repl` with a -vector of programming languages. Individual programming language -implementations are Rust types that implement the -`ProgrammingLanguageInterface` trait and store whatever persistent state is -relevant to that language. +Schala is implemented as a Rust library `schala-repl`, which provides a `Repl` +data structure that takes in a value implementing the +`ProgrammingLanguageInterface` trait. Individual programming language +implementations are Rust types that implement `ProgrammingLanguageInterface` +and store whatever persistent state is relevant to that language. -Run schala with: `cargo run`. This will drop you into a REPL environment. Type -`:help` for more information, or type in text in any supported programming -language (currently only schala-lang) to evaluate it in the REPL. + +## Running + +Run schala with the normal `cargo run`. This will drop you into a REPL +environment. Type `:help` for more information, or type in text in any +supported programming language (currently only `schala-lang`) to evaluate it in +the REPL. ## History @@ -61,35 +63,28 @@ of learning how to write a programming language. ### General -http://thume.ca/2019/04/18/writing-a-compiler-in-rust/ +* http://thume.ca/2019/04/18/writing-a-compiler-in-rust/ ### Type-checking -https://skillsmatter.com/skillscasts/10868-inside-the-rust-compiler -https://www.youtube.com/watch?v=il3gD7XMdmA -http://dev.stephendiehl.com/fun/006_hindley_milner.html -https://rust-lang-nursery.github.io/rustc-guide/type-inference.html - -https://eli.thegreenplace.net/2018/unification/ -https://eli.thegreenplace.net/2018/type-inference/ -http://smallcultfollowing.com/babysteps/blog/2017/03/25/unification-in-chalk-part-1/ -http://reasonableapproximation.net/2019/05/05/hindley-milner.html +* https://skillsmatter.com/skillscasts/10868-inside-the-rust-compiler +* https://www.youtube.com/watch?v=il3gD7XMdmA +* http://dev.stephendiehl.com/fun/006_hindley_milner.html +* https://rust-lang-nursery.github.io/rustc-guide/type-inference.html +* https://eli.thegreenplace.net/2018/unification/ +* https://eli.thegreenplace.net/2018/type-inference/ +* http://smallcultfollowing.com/babysteps/blog/2017/03/25/unification-in-chalk-part-1/ +* http://reasonableapproximation.net/2019/05/05/hindley-milner.html https://rickyhan.com/jekyll/update/2018/05/26/hindley-milner-tutorial-rust.html ### Evaluation -*Understanding Computation*, Tom Stuart, O'Reilly 2013 -*Basics of Compiler Design*, Torben Mogensen +* _Understanding Computation_, Tom Stuart, O'Reilly 2013 +* _Basics of Compiler Design_, Torben Mogensen ### Parsing -http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/ -https://soc.github.io/languages/unified-condition-syntax - -[Crafting Interpreters](http://www.craftinginterpreters.com/) +* http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/ +* https://soc.github.io/languages/unified-condition-syntax +* [Crafting Interpreters](http://www.craftinginterpreters.com/) ### LLVM -http://blog.ulysse.io/2016/07/03/llvm-getting-started.html - -###Rust resources -https://thefullsnack.com/en/rust-for-the-web.html - -https://rocket.rs/guide/getting-started/ +* http://blog.ulysse.io/2016/07/03/llvm-getting-started.html