About

Slate is a prototype-based object-oriented programming language based on SelfCLOS, 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.
Dynamic
Write code interactively instead of following the edit-save-compile-debug cycle. Update objects and their traits live without restarting.
Multiple Dispatching
Specialize methods for each argument, not just an “owner”; behavior is cooperative.
Multiple Inheritance
Even write your own function to customize the delegation list if you prefer.
Optional Keywords
Pass along any optional local bindings with a message or to a block.
Safe and Garbage Collected
Write code without worrying about corrupting the executable or having to free memory.
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.
Macros
Manipulate expression trees dynamically and abstractly with language support.

The Environment

Slate is also a “living” environment, and is intended to support the full services that one would expect from an general programming language, including GUI and FFI support.

Persistent World
The state of the Slate object system can be snapshot, saved, and reloaded reliably as image files.
Persistent Connections
Connections to the outside world (files, sockets, native libraries, windows) close and re-open transparently across startups and shutdowns.