Changes are mostly to the dir structures and build system for ScriptFu. Some changes to the outer plugin source to call the library. Why: so that other executables (future gimp-scheme-interpreter, or a future separated script-fu-server) can exist in separate directories, and share the library in memory (when built shared.) Whether the library is built shared and installed on its own (versus static and not installed) is a compile time option (both automake LibTool and meson abstract it away) The default is shared and installed, say as libgimp-scriptfu-3.0.so. Installed alongside other shared libraries (e.g. wherever libgimp is installed) to simplify packaging. A preliminary refactoring which helps enable MR gimp!647
88 lines
3.5 KiB
Text
88 lines
3.5 KiB
Text
TinyScheme would not exist if it wasn't for MiniScheme. I had just
|
|
written the HTTP server for Ovrimos SQL Server, and I was lamenting the
|
|
lack of a scripting language. Server-side Javascript would have been the
|
|
preferred solution, had there been a Javascript interpreter I could
|
|
lay my hands on. But there weren't. Perl would have been another solution,
|
|
but it was probably ten times bigger that the program it was supposed to
|
|
be embedded in. There would also be thorny licencing issues.
|
|
|
|
So, the obvious thing to do was find a truly small interpreter. Forth
|
|
was a language I had once quasi-implemented, but the difficulty of
|
|
handling dynamic data and the weirdness of the language put me off. I then
|
|
looked around for a LISP interpreter, the next thing I knew was easy to
|
|
implement. Alas, the LeLisp I knew from my days in UPMC (Universite Pierre
|
|
et Marie Curie) had given way to Common Lisp, a megalith of a language!
|
|
Then my search lead me to Scheme, a language I knew was very orthogonal
|
|
and clean. When I found Mini-Scheme, a single C file of some 2400 loc, I
|
|
fell in love with it! What if it lacked floating-point numbers and
|
|
strings! The rest, as they say, is history.
|
|
|
|
Below are the original credits. Don't email Akira KIDA, the address has
|
|
changed.
|
|
|
|
---------- Mini-Scheme Interpreter Version 0.85 ----------
|
|
|
|
coded by Atsushi Moriwaki (11/5/1989)
|
|
|
|
E-MAIL : moriwaki@kurims.kurims.kyoto-u.ac.jp
|
|
|
|
THIS SOFTWARE IS IN THE PUBLIC DOMAIN
|
|
------------------------------------
|
|
This software is completely free to copy, modify and/or re-distribute.
|
|
But I would appreciate it if you left my name on the code as the author.
|
|
|
|
This version has been modified by R.C. Secrist.
|
|
|
|
Mini-Scheme is now maintained by Akira KIDA.
|
|
|
|
This is a revised and modified version by Akira KIDA.
|
|
current version is 0.85k4 (15 May 1994)
|
|
|
|
Please send suggestions, bug reports and/or requests to:
|
|
<SDI00379@niftyserve.or.jp>
|
|
|
|
|
|
Features compared to MiniSCHEME
|
|
-------------------------------
|
|
|
|
All code is now reentrant. Interpreter state is held in a 'scheme'
|
|
struct, and many interpreters can coexist in the same program, possibly
|
|
in different threads. The user can specify user-defined memory allocation
|
|
primitives. (see "Programmer's Reference")
|
|
|
|
The reader is more consistent.
|
|
|
|
Strings, characters and flonums are supported. (see "Types")
|
|
|
|
Files being loaded can be nested up to some depth.
|
|
|
|
R5RS I/O is there, plus String Ports. (see "Scheme Reference","I/O")
|
|
|
|
Vectors exist.
|
|
|
|
As a standalone application, it supports command-line arguments.
|
|
(see "Standalone")
|
|
|
|
Running out of memory is now handled.
|
|
|
|
The user can add foreign functions in C. (see "Foreign Functions")
|
|
|
|
The code has been changed slightly, core functions have been moved
|
|
to the library, behavior has been aligned with R5RS etc.
|
|
|
|
Support has been added for user-defined error recovery.
|
|
(see "Error Handling")
|
|
|
|
Support has been added for modular programming.
|
|
(see "Colon Qualifiers - Packages")
|
|
|
|
To enable this, EVAL has changed internally, and can
|
|
now take two arguments, as per R5RS. Environments are supported.
|
|
(see "Colon Qualifiers - Packages")
|
|
|
|
Promises are now evaluated once only.
|
|
|
|
(macro (foo form) ...) is now equivalent to (macro foo (lambda(form) ...))
|
|
|
|
The reader can be extended using new #-expressions
|
|
(see "Reader extensions")
|