Go to file
greg 1d9d0c4395 Okay this compiles
The secret (from #rust) appeared to be that Fn() needed to have + Send
explicitly annotated on it
2018-07-26 00:52:45 -07:00
source_files Added a non-interactive schala source file 2017-10-02 23:42:34 -07:00
src Okay this compiles 2018-07-26 00:52:45 -07:00
static Switch from request to superagent 2018-07-26 00:52:45 -07:00
.gitignore Add .schala_repl to gitignore 2017-09-19 22:11:05 -07:00
build.rs Convert webapp to using included files 2018-07-26 00:52:45 -07:00
Cargo.toml Some linker bullshit 2018-07-26 00:52:45 -07:00
Grammar Fixed arg list parsing 2017-09-19 22:10:53 -07:00
README.md Add some resources 2017-10-03 21:28:17 -07:00

TODO: -null-only language should be called Maaru -haskell-ish langauge should be called Robo -typeful scripting language should be called schala rename accordingly!

Schala - a programming language meta-interpreter

Schala is a Rust-language framework written to make it easy to create and experiment with toy programming languages. It provides a common REPL, and a trait ProgrammingLanguage with methods for tokenizing text, parsing tokens, evaluating an abstract syntax tree, and other tasks that are common to all programming languages.

Schala started out life as an experiment in writing a Javascript-like programming language that would never encounter any kind of runtime value error, but rather always return null under any kind of error condition. I had seen one too many Javascript Uncaught TypeError: Cannot read property ___ of undefined messages, and I was a bit frustrated. Plus I had always wanted to write a programming langauge from scratch, and Rust is a fun language to program in. Over time I became interested in playing around with other sorts of programming languages as well, and wanted to make the process as general as possible.

The name of the project comes from Schala the Princess of Zeal from the 1995 SNES RPG Chrono Trigger. I like classic JRPGs and enjoyed the thought of creating a language name confusingly close to Scala. The naming scheme for languages implemented with the Schala meta-interpreter is Chrono Trigger characters.

Languages implemented using the meta-interpreter

  • The eponymous Schala language is an interpreted/compiled scripting langauge, designed to be relatively simple, but with a reasonably sophisticated type system.

  • Maaru was the original Schala (since renamed to free up the name Schala for the above language), a very simple dynamically-typed scripting language such that all possible runtime errors result in null rather than program failure.

  • Robo is an experiment in creating a lazy, functional, strongly-typed language much like Haskell

Reference works

Here's a partial list of resources I've made use of in the process of learning how to write a programming language.

Type-checking

https://skillsmatter.com/skillscasts/10868-inside-the-rust-compiler

Evaluation

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/

Crafting Interpreters

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/