Currently a few performances issues with Toy on Dreamcast so this is only just to show that it works but to run a Toy Script Go to the test directory and open up the command line
- source /opt/toolchains/dc/kos/environ.sh
- make
the .elf file should appear in your project directory. The makefiles are set up in a way so if your KOS install is the default one in the default location it should work if not you may need to modify the makefiles.
to modify the toy script go to romdisk/scripts/dreamcst.toy and toy away.
The Toy programming language is an imperative bytecode-intermediate embedded scripting language. It isn't intended to operate on its own, but rather as part of another program, the "host". This process is intended to allow a decent amount of easy customisation by the host's end user, by exposing logic in script files. Alternatively, binary files in a custom format can be used as well.
The host will provide all of the extensions needed on a case-by-case basis. Script files have the .toy
file extension, while binary files have the .tb
file extension.
This is the Toy programming language interpreter, written in C.
- Simple C-like syntax
- Bytecode intermediate compilation
- Optional, but robust type system (including
opaque
for arbitrary data) - Functions and types are first-class citizens
- Import native libraries from the host
- Fancy slice notation for strings, arrays and dictionaries
- Can re-direct output, error and assertion failure messages
- Open source under the zlib license
For Windows(mingw32 & cygwin), Linux and MacOS, simply run make
in the root directory.
For Windows(MSVC), Visual Studio project files are included.
Note: MacOS and Windows(MSVC) are not officially supported, but we'll do our best!
Run make install-tools
to install a number of tools, including:
- VSCode syntax highlighting
Other tools such as a disassembler are available, as well - simply run make
in the correct directory.
import standard; //for a bunch of utility functions
print "Hello world"; //"print" is a keyword
var msg = "foobar"; //declare a variable like this
assert true, "This message won't be seen"; //assert is another keyword
//-------------------------
fn makeCounter() { //declare a function like this
var total: int = 0; //declare a variable with a type like this
fn counter(): int { //declare a return type like this
return ++total;
}
return counter; //closures are explicitly supported
}
var tally = makeCounter();
print tally(); //1
print tally(); //2
print tally(); //3
This source code is covered by the zlib license (see LICENSE.md).
@hiperiondev - Disassembler, porting support and feedback
@add00 - Library support
@gruelingpine185 - Unofficial MacOS support
@solar-mist - Minor bugfixes
Unnamed Individuals - Feedback
- Seth A. Robinson
Special thanks to http://craftinginterpreters.com/ for their fantastic book that set me on this path.