raw
tinyscheme_genesi...    1      TinyScheme would not exist if it wasn't for MiniScheme. I had just
tinyscheme_genesi... 2 written the HTTP server for Ovrimos SQL Server, and I was lamenting the
tinyscheme_genesi... 3 lack of a scripting language. Server-side Javascript would have been the
tinyscheme_genesi... 4 preferred solution, had there been a Javascript interpreter I could
tinyscheme_genesi... 5 lay my hands on. But there weren't. Perl would have been another solution,
tinyscheme_genesi... 6 but it was probably ten times bigger that the program it was supposed to
tinyscheme_genesi... 7 be embedded in. There would also be thorny licencing issues.
tinyscheme_genesi... 8
tinyscheme_genesi... 9 So, the obvious thing to do was find a trully small interpreter. Forth
tinyscheme_genesi... 10 was a language I had once quasi-implemented, but the difficulty of
tinyscheme_genesi... 11 handling dynamic data and the weirdness of the language put me off. I then
tinyscheme_genesi... 12 looked around for a LISP interpreter, the next thing I knew was easy to
tinyscheme_genesi... 13 implement. Alas, the LeLisp I knew from my days in UPMC (Universite Pierre
tinyscheme_genesi... 14 et Marie Curie) had given way to Common Lisp, a megalith of a language!
tinyscheme_genesi... 15 Then my search lead me to Scheme, a language I knew was very orthogonal
tinyscheme_genesi... 16 and clean. When I found Mini-Scheme, a single C file of some 2400 loc, I
tinyscheme_genesi... 17 fell in love with it! What if it lacked floating-point numbers and
tinyscheme_genesi... 18 strings! The rest, as they say, is history.
tinyscheme_genesi... 19
tinyscheme_genesi... 20 Below are the original credits. Don't email Akira KIDA, the address has
tinyscheme_genesi... 21 changed.
tinyscheme_genesi... 22
tinyscheme_genesi... 23 ---------- Mini-Scheme Interpreter Version 0.85 ----------
tinyscheme_genesi... 24
tinyscheme_genesi... 25 coded by Atsushi Moriwaki (11/5/1989)
tinyscheme_genesi... 26
tinyscheme_genesi... 27 E-MAIL : moriwaki@kurims.kurims.kyoto-u.ac.jp
tinyscheme_genesi... 28
tinyscheme_genesi... 29 THIS SOFTWARE IS IN THE PUBLIC DOMAIN
tinyscheme_genesi... 30 ------------------------------------
tinyscheme_genesi... 31 This software is completely free to copy, modify and/or re-distribute.
tinyscheme_genesi... 32 But I would appreciate it if you left my name on the code as the author.
tinyscheme_genesi... 33
tinyscheme_genesi... 34 This version has been modified by R.C. Secrist.
tinyscheme_genesi... 35
tinyscheme_genesi... 36 Mini-Scheme is now maintained by Akira KIDA.
tinyscheme_genesi... 37
tinyscheme_genesi... 38 This is a revised and modified version by Akira KIDA.
tinyscheme_genesi... 39 current version is 0.85k4 (15 May 1994)
tinyscheme_genesi... 40
tinyscheme_genesi... 41 Please send suggestions, bug reports and/or requests to:
tinyscheme_genesi... 42 <SDI00379@niftyserve.or.jp>
tinyscheme_genesi... 43
tinyscheme_genesi... 44
tinyscheme_genesi... 45 Features compared to MiniSCHEME
tinyscheme_genesi... 46 -------------------------------
tinyscheme_genesi... 47
tinyscheme_genesi... 48 All code is now reentrant. Interpreter state is held in a 'scheme'
tinyscheme_genesi... 49 struct, and many interpreters can coexist in the same program, possibly
tinyscheme_genesi... 50 in different threads. The user can specify user-defined memory allocation
tinyscheme_genesi... 51 primitives. (see "Programmer's Reference")
tinyscheme_genesi... 52
tinyscheme_genesi... 53 The reader is more consistent.
tinyscheme_genesi... 54
tinyscheme_genesi... 55 Strings, characters and flonums are supported. (see "Types")
tinyscheme_genesi... 56
tinyscheme_genesi... 57 Files being loaded can be nested up to some depth.
tinyscheme_genesi... 58
tinyscheme_genesi... 59 R5RS I/O is there, plus String Ports. (see "Scheme Reference","I/O")
tinyscheme_genesi... 60
tinyscheme_genesi... 61 Vectors exist.
tinyscheme_genesi... 62
tinyscheme_genesi... 63 As a standalone application, it supports command-line arguments.
tinyscheme_genesi... 64 (see "Standalone")
tinyscheme_genesi... 65
tinyscheme_genesi... 66 Running out of memory is now handled.
tinyscheme_genesi... 67
tinyscheme_genesi... 68 The user can add foreign functions in C. (see "Foreign Functions")
tinyscheme_genesi... 69
tinyscheme_genesi... 70 The code has been changed slightly, core functions have been moved
tinyscheme_genesi... 71 to the library, behavior has been aligned with R5RS etc.
tinyscheme_genesi... 72
tinyscheme_genesi... 73 Support has been added for user-defined error recovery.
tinyscheme_genesi... 74 (see "Error Handling")
tinyscheme_genesi... 75
tinyscheme_genesi... 76 Support has been added for modular programming.
tinyscheme_genesi... 77 (see "Colon Qualifiers - Packages")
tinyscheme_genesi... 78
tinyscheme_genesi... 79 To enable this, EVAL has changed internally, and can
tinyscheme_genesi... 80 now take two arguments, as per R5RS. Environments are supported.
tinyscheme_genesi... 81 (see "Colon Qualifiers - Packages")
tinyscheme_genesi... 82
tinyscheme_genesi... 83 Promises are now evaluated once only.
tinyscheme_genesi... 84
tinyscheme_genesi... 85 (macro (foo form) ...) is now equivalent to (macro foo (lambda(form) ...))
tinyscheme_genesi... 86
tinyscheme_genesi... 87 The reader can be extended using new #-expressions
tinyscheme_genesi... 88 (see "Reader extensions")