-- TelosiS (Version 1.00-feeler) --

Note: This is just a feeler distribution to court comment from members of
      the EuLisp working group. If you're not a member of this select band
      of social outcasts then comment is still welcome but please
      bear in mind that this Telos contains features and restrictions 
      not yet agreed (or even discussed yet) by the working group so,
      if you find anything that appalls you, chances are it's down to 
      me alone and not a feature of EuLisp.

      For this reason also, this code is not yet intended to be widely
      and freely (in a devil-may-care sense) distributed so please do 
      not redistribute it yourself. Point interested parties at the 
      address given below for information and up to date versions.

Also: Credit and thanks to the authors of the two files included from
      Aubrey Jaffer's SLIB Scheme library.

-- Telos --

Telos is the reflective object system of both EuLisp and LeLisp V16.
It can be summarised as being a rationalised CLOS for a module-based
environment with simpler default functionality (general multiple
inheritance and before/after/under/over/etc method combination
are not provided) but including a powerful, standard meta-object
protocol supporting its portable extension. 

Note that, although its MOP can stand alone as it does here, Telos
is intended to be fully integrated into its host language, as it 
is in EuLisp and LeLisp V16, whose datatypes and operations may be 
specialised by applications.

-- TelosiS --

TelosiS is the result of an attempt to produce a simple but fully 
functional implementation of Telos' meta-object protocol in Scheme,
the aim being to provide a reference implementation in a stable 
language, not far removed from EuLisp, that accurately represents
the current specification of the MOP.

The system's simplicity has been gained at the expense of run-time
efficiency but, together with a slightly unusual bootstrap sequence,
has yielded a clearer definition of Telos' behaviour in the style of a
well-structured Telos program. The lower-level boot code need not be 
suffered to read the MOP implementation.

Only token efforts at optimisation have been made so as to avoid 
obfuscating the code and these serve only to identify the structure 
of typical, high-performance implementations - a method lookup cache
abstraction is used in the generic dispatch code for example. 

-- Requirements --

Preferably a Scheme implementation with some kind of old-fangled macro
facility. Failing that, there is a generic version of the loader
supplied which uses its own (very dodgy) macro expander that's just
powerful enough to load the MOP and the examples safely and very
little else.

Currently, it is known to run under T in scheme mode (i.e. after
calling "(scheme-reset)"), xscheme, cscheme and also FEEL's Scheme
emulation module using local macro facilities. In addition, it runs
under scm using its own macro expander.

The files to load for each of these are:

	t		telosis.t (or telosis.t.c after compilation)
	xscheme		telosis.xscm
	cscheme		telosis.cscm
	feel		telosis.em (just (!> telosis) to load the module)

	scm		telosis.scm (loads the generic version)
	any scheme	telosis.generic

Speed-wise, T's favourite of these followed by scm and then xscheme.
Don't waste your time with cscheme - life's too short. 

Even T just makes things comfortable while experimenting - remember
that this implementation is _not_ designed to provide a practical object 
system for Scheme and succeeds in that admirably...

-- Where to Find It --

The latest version is available through anonymous ftp from 
gdr.bath.ac.uk (138.38.32.1) where it lives in the directory:
/pub/eulisp/Telosis

-- Notes on Use --

Loading telosis.xxx will place you in a special read-eval-print loop.
If you've hooked into the built-in macro system, then there is nothing
crucial about this apart from the fact that it uses a friendlier 
generic output function - Telos defining forms can also be input at 
the standard Scheme prompt and loaded normally from files. If the
provided macro expander is being used, expressions must be evaluated
via EXPANDING-EVAL or loaded using EXPANDING-LOAD, although there
is no guarantee that it will expand all code correctly.

A few simple examples of Telos code live in the file: Examples.
A number of longer example applications can be found in the 
Applications directory.

-- A Code Library --

A few examples of typical MOP applications are included with the
distribution. This will be extended over time and if you implement 
any interesting extensions that you'd like included, perhaps derived
from those already given (this is an OOPL we're talking about here
after all) - then by all means send them in.

-- Correspondence --

Questions, comments, suggestions, bug reports and interesting MOP 
extensions are all very welcome (although not necessarily in that 
order of preference) and can, currently, be e-mailed to the author 
at:

			 kjp@maths.bath.ac.uk

However, this address remains valid only until 30/9/92.

-- Keith --

