[plt-scheme] Swindle

From: Eli Barzilay (eli at barzilay.org)
Date: Sat Sep 21 22:24:50 EDT 2002

Swindle is finally ready for PLT 202.


 From the readme:

Swindle is a collection of modules that extend PLT Scheme
(www.plt-scheme.org) with many additional features.  The main feature
which started this project is a CLOS-like object system based on
Tiny-CLOS from Xerox, but there is a lot more -- a generalized
Lisp-like `set!'  and related functionality, lambda argument
&-keywords, a lot of convenient syntaxes etc.  The latest version of
Swindle is available at http://www.barzilay.org/Swindle/.  There is
also a low volume mailing list, mail me to register.  Comments, bugs,
or whatever are welcome.

The following is a high-level description of major features provided
by Swindle.  For every feature, the file that provides it is
specified, if only a subset of the system is needed.

* Some basic syntax extensions, including lambda &-keywords, and
  improved `define' and `let' forms.  (Available separately using

* Generic setters with `set!', more useful side effect forms: `pset!',
  `shift!', `rotate!', and some simple ones like `inc!', and `push!'.
  (Available separately using "setf.ss", where the names `setf!' and
  `psetf!' are used to avoid changing the Scheme form.)

* Convenient syntax for `provide' forms.  ("misc.ss")

* Easy macro-defining macros -- simple syntax-rules macros, and a
  generic `defmacro' utility, all with a local `let...' form, and
  extended to easily create symbol macros.  ("misc.ss")

* An `echo' mechanism which is an alternative to using format strings,
  and contains many useful features including a list iteration
  construct, and easy to extend.  ("misc.ss")

* A `regexper' syntax which is similar to a `case' on strings with
  easy access to submatches.  ("misc.ss")

* A hash table that is suitable for memoization (works on identities
  of elements of a list).  ("misc.ss")

* A CLOS-like object system -- based on Tiny CLOS, but with many
  extensions that bring it much closer to CLOS, and heavily optimized.
  Some added features include singleton and struct classes, applicable
  stand-alone methods, method-combination, and some MOP extensions.
  (Available without syntax bindings in "tiny-clos.ss")

* Good integration with the Scheme implementation: primitive values
  have corresponding Swindle classes, and struct types can also be
  used as type specializers.  A Swindle class will be made when
  needed, and it will reflect the struct hierarchy.  ("tiny-clos.ss")

* Many hairy macros that make the object system much more convenient
  (CLOS has also a lot of macro code).  Some of the macros (especially
  `defclass') can be customized.  ("clos.ss")

* Useful generic functions, including `print-object' which is used to
  display all objects.  ("extra.ss")

* A matcher mechanism with a generic-like interface.  ("extra.ss")

* The fun `amb' toy.  ("extra.ss")

* A language that can easily create HTML, where the result is
  human-editable.  ("html.ss")

* Plays well with DrScheme.  ("tool.ss")

* Some customizable syntax features.  ("custom.ss")

* Easy to add customized languages to DrScheme.  ("custom.ss")

* A bonus graphic demonstration of lambda calculus principles.

          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                  http://www.barzilay.org/                 Maze is Life!

Posted on the users mailing list.