"Safe if used as prescribed" (Philip K. Dick, "Ubik")

TinyScheme is a lightweight Scheme interpreter that implements as large a subset of R5RS as was possible without getting very large and complicated. It is meant to be used as an embedded scripting interpreter for other programs. As such, it does not offer IDEs or extensive toolkits although it does sport a small top-level loop, included conditionally. A lot of functionality in TinyScheme is included conditionally, to allow developers freedom in balancing features and footprint.

As an embedded interpreter, it allows multiple interpreter states to coexist in the same program, without any interference between them. Programmatically, foreign functions in C can be added and values can be defined in the Scheme environment. Being a quite small program, it is easy to comprehend, get to grips with, and use.

The latest version has shrunk again. When you conditionally exclude the more advanced features, the object file in Linux Intel is smaller than 64k.

Supposedly, LispMe is based on this?


What's missing from R5RS compliance? What macro system does it use?


Macros are low-level, straight from miniscm, if I understand it correctly. TinyScheme runs "chicken-conform.scm" fine, and the relevant examples from R5RS that I have tried. Manuel Heras-Gilsanz wrote some TinyScheme Extensions (TSX 1.1), that include simple sockets functionality etc that can be conditionally added in. TinyScheme seems to have been embedded into several projects (when last I searched). I have ported much of it into Fortran 95 with very little trouble (most of the code is just line for line translation).


Missing: Reusable continuations. Hygenic macros. True numeric tower - TS just treats all floats as inexact. True values - in TS values are just lists. I added dynamic-wind a few months back.