Update README

This commit is contained in:
Greg Shuflin 2021-10-20 18:43:41 -07:00
parent 5eb743a8b5
commit f625b80d0c

View File

@ -1,22 +1,24 @@
# Schala - a programming language meta-interpreter # Schala - a programming language meta-interpreter
Schala is a Rust framework written to make it easy to create and experiment 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 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 tree, and other tasks that are common to all programming languages, as well as
between multiple programming languages. sharing state between multiple programming languages.
Schala is implemented as a Rust library `schala-repl`, which provides a Schala is implemented as a Rust library `schala-repl`, which provides a `Repl`
function `start_repl`, meant to be used as entry point into a common REPL or data structure that takes in a value implementing the
non-interactive environment. Clients are expected to invoke `start_repl` with a `ProgrammingLanguageInterface` trait. Individual programming language
vector of programming languages. Individual programming language implementations are Rust types that implement `ProgrammingLanguageInterface`
implementations are Rust types that implement the and store whatever persistent state is relevant to that language.
`ProgrammingLanguageInterface` trait 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 ## Running
language (currently only schala-lang) to evaluate it in the REPL.
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 ## History
@ -61,35 +63,28 @@ of learning how to write a programming language.
### General ### 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 ### Type-checking
https://skillsmatter.com/skillscasts/10868-inside-the-rust-compiler * https://skillsmatter.com/skillscasts/10868-inside-the-rust-compiler
https://www.youtube.com/watch?v=il3gD7XMdmA * https://www.youtube.com/watch?v=il3gD7XMdmA
http://dev.stephendiehl.com/fun/006_hindley_milner.html * http://dev.stephendiehl.com/fun/006_hindley_milner.html
https://rust-lang-nursery.github.io/rustc-guide/type-inference.html * https://rust-lang-nursery.github.io/rustc-guide/type-inference.html
* https://eli.thegreenplace.net/2018/unification/
https://eli.thegreenplace.net/2018/unification/ * https://eli.thegreenplace.net/2018/type-inference/
https://eli.thegreenplace.net/2018/type-inference/ * http://smallcultfollowing.com/babysteps/blog/2017/03/25/unification-in-chalk-part-1/
http://smallcultfollowing.com/babysteps/blog/2017/03/25/unification-in-chalk-part-1/ * http://reasonableapproximation.net/2019/05/05/hindley-milner.html
http://reasonableapproximation.net/2019/05/05/hindley-milner.html
https://rickyhan.com/jekyll/update/2018/05/26/hindley-milner-tutorial-rust.html https://rickyhan.com/jekyll/update/2018/05/26/hindley-milner-tutorial-rust.html
### Evaluation ### 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 ### Parsing
http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/ * http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/
https://soc.github.io/languages/unified-condition-syntax * https://soc.github.io/languages/unified-condition-syntax
* [Crafting Interpreters](http://www.craftinginterpreters.com/)
[Crafting Interpreters](http://www.craftinginterpreters.com/)
### LLVM ### LLVM
http://blog.ulysse.io/2016/07/03/llvm-getting-started.html * 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/