Introduction to Slate

From SlateWiki

Introduction to Slate

Slate centers around a language based on object-oriented programming, but is different in a few ways from what most programmers expect in that category. Slate does not rely on classes for instantiation and describing other objects; objects hold their own slots and methods, and share behavior through object-specific inheritance, sometimes called "delegation". Shared behaviors are commonly called "traits" in Slate.

Slate is largely based on the Smalltalk language, so expressions are entirely centered around message-passing. The differences lie in the fact that Slate's messages involve all arguments equally, instead of specifying a specific receiver and forcing the receiver to decide how to handle it without extra information.

Since Slate's objects can have their own behavior and attributes, they serve effectively as a means to organize the system, as is the case for file systems.

Overall Vision

The "big picture" vision for Slate is to provide a practical, but well-designed and federated system that grows as a whole to support convenience of expression with objects, without any extra baggage, historical or idiosyncratic. We want it to make the user feel and be more creative and productive, without the impression of fences in the system or lack of care from library designers. And, not least of all, using Slate should be fun!

Specific Language Features

Semantics and Syntax:

  • Multiple Dispatch (http://slate.tunes.org/doc/progman/node10.html#SECTION00044400000000000000)
  • Instance-Specific methods and attributes
  • Closure semantics for (first-class) code blocks
  • Optional static typing and type inference
  • Multiple dynamic object-specific inheritance
  • Direct support for syntactic abstraction and templates (http://slate.tunes.org/doc/progman/node12.html)
  • Optional-argument passing
  • Subjective dispatch (http://slate.tunes.org/doc/progman/node10.html#SECTION00044700000000000000)