Overview
Slate is a prototype-based object-oriented programming language based on Self, CLOS, and Smalltalk-80. Slate syntax is intended to be as familiar as possible to a Smalltalker, for the clarity of messages as phrases. Unlike the Smalltalk family, methods within Slate can be assigned to a signature of objects, instead of being installed on one favored receiver. Slate has also many further expansions of the semantics which enable more concise and natural ways to express solutions to problems.
Particular attention is being paid to the design of a fuller and more useful set of libraries than even the usual Smalltalk set, for collections, streams, meta-level protocols, concurrency, and exception-handling, among others. Our prime inspirations are the libraries of Strongtalk, Common Lisp, and Dylan.
- Prototypes
- Define methods, slots, instantiation, and inheritance per object.
- Multiple Dispatching
- Specialize methods for each argument, not just an “owner”; behavior is cooperative.
- Optional Type Annotations
- Annotate the intended type of a slot or expression with type inference and a extensible independent type system.
- Syntactic Abstractions
- Annotate and manipulate expression trees dynamically and abstractly with language support.
- Optional Keywords
- Pass along any optional local bindings with a message or to a block.
- Subjective Dispatching
- Conditionalize a method's implementation on elements of the context.
- Collections
- Aggregate, transform, and fold your data into different shapes easily and generically.
- Streams
- Quickly plug together flexible stream facilities to and from many data types, with the same power of collections.
- Exception-Handling
- Handle exceptional situations powerfully with live customizable condition and restart objects.
- Concurrency
- Spawn service requests at will, and forget about blocking and locking. Promise objects keep you interacting safely.
The Environment
Slate is also a "living" environment, and is intended to support the full services that one would expect from an Operating System, including a graphical interface. There are many new designs and ideas that will be implemented for the language, including a modification of the Morphic user interface to support the notions in the CLIM user interface architecture.
We plan to fully bootstrap Slate using similar optimization methods as its predecessor Self used, as well as some more recent advances. We believe, however, that a properly self-hosted implementation of these ideas will support better integration and extension, and in the end result in a much lighter-weight system.