Skip to content

Bruceleeto/DCToy

 
 

Repository files navigation

Dreamcast

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.

Toy

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.

Nifty Features

  • 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

Building

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!

Tools

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.

Syntax

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

License

This source code is covered by the zlib license (see LICENSE.md).

Contributions

@hiperiondev - Disassembler, porting support and feedback
@add00 - Library support
@gruelingpine185 - Unofficial MacOS support
@solar-mist - Minor bugfixes
Unnamed Individuals - Feedback

Patrons via Patreon

  • Seth A. Robinson

Special thanks to http://craftinginterpreters.com/ for their fantastic book that set me on this path.

About

A toy programming language.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 97.9%
  • Makefile 1.2%
  • C++ 0.9%