Below are the transcribed notes I (dnm) took on Slate during a relatively
in-depth conversation about its aims and its design with Brian Rice (water)
on IRC back in February of 2002.


D. Moniz
2002-02-16
(Transcribed on 2002-05-03)

Notes about Slate:

Concepts:
    - Objects
    - Meta-objects
    - Graph manipulation
    - Term rewriting
    - Postfix syntax with bracket and paren delimited code blocks

Models:
    - Self: objects as environments, prototypes, lightweight UI, directness
    - BETA: objects with unified procedures, modelling, controlled inheritance
    - Joy: concatenative syntax, open implementation, reader function/macros
    - Forth: meta-compilers, tiny and simple implementation, otherwise 
      superceded by Joy
    - Lisp: syntactic abstraction, open implementation, reader function/macros

Questions and Answers:

1. What is Slate's purpose in life?

To provide for implementation of TUNES requirements that aren't already met,
and to provide a language that is more hackable and extensible at lower layers
than is currently allowed (e.g. at the lexical level).

2. Can this be accomplished with an existing language with less work?

Existing languages like Lisp or Forth could be used, but aren't sufficiently
well-put-together in the sense of having single abstractions equally usable
for multiple types of system entities (e.g. environments).

3. What does Slate bring to the table that other languages don't have?

Slate centers around a basic data abstraction (the not-necessarily-finite map)
which can be realized in many different ways, and which provides orderable
structure and lexical tie-ins.

4. What will Slate be implemented in and why?

Common Lisp, because it has very good hooks included e.g. for reader functions
and parsing, and it has industrial implementations with garbage collection and
a good development environment.

5. What is the _minimum_ set of abstractions that Slate will _need_ to have
inherent in its design in order to achieve its goals, taking the above into
account?

Maps, meta-objects, bootstrapping literal types like characters, hardware
integers, bit-fields, and such. However, the literal types could be shifted to
a source based implementation later if a good Slate compiler became available.
The evaluation primitives are not yet specified, however, but would preferably
be a small set of well understood behaviors to be combined safely into
interesting commonly-know behaviors.
