Concept:ObjectSystemThe following tree is extracted from Alex Shinn's
post to comp.lang.scheme.
- CLOS: Common Lisp Object System, based on CommonLoops and New Flavors,
winning out in the CL standardization over Object Lisp and
Common Objects. I know nothing of those 4 original systems.
- TinyCLOS: Subset of CLOS written in pure Scheme, including a
meta-object protocol (MOP). Classes, generics &
methods all 1st class. Native OO system for Chicken.
- SOS: MIT Scheme's native OO system, mostly differs in naming
and interface. No MOP via meta-classes but supports
computed methods.
- RScheme: Based on CLOS and Dylan. The object systems in Gauche and RScheme
are remarkably similar.
- STklos: Native TinyCLOS implementation. Class redefinition.
Don't need to predefine generics (complicates module
interaction).
- Gauche: Well integrated with native libraries.
Collections API. MOP utilities.
- GOOPS: Guile's native OO system, also well integrated.
Very well documented.
- SISC: Similar to TinyCLOS (possibly a conscious influence though
I can't find any lineage in the docs). Limited multiple
inheritance.
- Meroon: Another CLOS derivative, similar to TinyCLOS but more
featureful (also has stripped down version Meroonet).
MOP. DSSSL support. Excellent documentation.
- Bigloo: Native implementation based on Meroon, has 1st class
classes, generics & methods. No MOP. Fields can be
typed with native C types for efficiency.
- Swindle: PLT Scheme's. (see MzScheme).
- YASOS: Yet Another Scheme Object System, a portable OO system
distributed with SLIB. Works in terms of dispatching
methods (called operations) on arbitrary Scheme values
(which can inherit from arbitrary Scheme values - there
are no classes). Includes a collections API.
- MOS: Macroless Object System, removes macros (and thus uses
different API) from YASOS but keeps the idea of methods
on objects with no classes. Distributed with SLIB.
- MzScheme: System of classes, objects and methods, all 1st class Scheme
values, but no MOP. Single inheritance with interfaces and a
public/private distinction similar to the C++ & Java style of
OO. Uses explicit send syntax to call methods, although a
with-method syntax is provided to look like CLOS methods.
Excellent interactive documentation.
- Kawa: Access to Java OO system. Methods defined statically with
classes. Provides "this" syntax.
- SICP: Chapter 3 of The Structure & Interpretation of Computer
Programs describes a very simple dispatch closure based
OO system. Some of the smaller OO system's in the
Scheme repositories follow this style, most Schemers
write such an OO system at some point, and many Schemers
use this style without any sugar when they want portable
code (see much of SLIB).
|