diff --git a/README.md b/README.md index 8c720af..4ba9bd0 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,22 @@ # Schala - a programming language meta-interpreter Schala is a Rust framework written to make it easy to create and experiment -with toy programming languages. It provides a cross-language REPL and +with multipl 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. +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 `repl_main` meant to be used as the equivalent of main() for library -users. This function parses command-line arguments and either runs an interactive -REPL or interprets a program non-interactively. +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. -Individual programming language implementations are Rust types that implement -the `ProgrammingLanguageInterface` trait and store whatever persistent state is -relevant to that language. The ability to share state between different -programming languages is in the works. +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. ## History @@ -33,18 +36,18 @@ creating a language name confusingly close to Scala. The naming scheme for languages implemented with the Schala meta-interpreter is Chrono Trigger characters. -Schala is incomplete alpha software and is not ready for public release. +Schala and languages implemented with it are incomplete alpha software and are +not ready for public release. ## 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. +* The eponymous *Schala* language is a work-in-progress general purpose + programming language with static typing and algebraic data types. Its design + goals include having a very straightforward implemenation and being syntactically + minimal. -* *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. +* *Maaru* is a very simple dynamically-typed scripting language, with the semantics + that all runtime errors return a `null` value rather than fail. * *Robo* is an experiment in creating a lazy, functional, strongly-typed language much like Haskell