To be replaced by output from the manual.
Slate descends from the Self programming language, where object-centered development is emphasized. So, instead of instantiating classes to form new objects, pre-existing objects are copied or cloned and modified to produce new ones. Re-use of existing code, data, and behavior is accomplished through delegation between objects: whenever a service is requested of an object which is not defined directly by it, it consults the objects in slots marked for delegation for the same services with the original object as the argument.
Slate, however, takes after Smalltalk in that the syntax distinguishes between objects and block closures (or methods) syntactically. The literal object syntax of Self does not carry forward into Slate.
Slate provides several primitive messages to manage slots:
object addSlot: slotSymbol
object addSlot: name valued: val
object addDelegate: slotSymbol
and object addDelegate: slotSymbol valued: val
Each of the former has a variant which doesn't result in a mutator method being generated for its slot: addImmutableSlot:valued:
and addImmutableDelegate:valued:
.
Root
Oddball
Nil
Derivable
derive
and deriveWith:
, which means they can be readily extended.Cloneable
Method
All of the normal arithmetic operations are supported primitively between elements of the same type. Type coercion has to be done entirely in code, no implicit coercions are performed by the virtual machine. The interpreter also transparently provides unlimited-size integers, although the bootstrapped system may not do so implicitly.
The following are the rest of the operations, given with an indication of their "signatures":
Float raisedTo: Float
Integer as: Float
Float as: Integer
Integer bitOr: Integer
Integer bitXor: Integer
Integer bitAnd: Integer
Integer bitShift: Integer
Integer bitNot
Integer >> Integer
Integer << Integer
Integer quo: Integer