|
|
|
@ -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 |
|
|
|
|