Sather


For people with the surname, see Sather.
Sather is an object-oriented programming language. It originated circa 1990 at the International Computer Science Institute at the University of California, Berkeley, developed by an international team led by Steve Omohundro. It supports garbage collection and generics by subtypes.
Originally, it was based on Eiffel, but it has diverged, and now includes several functional programming features.
The name is inspired by Eiffel; the Sather Tower is a recognizable landmark at Berkeley, named after Jane Krom Sather, the widow of Peder Sather, who donated large sums to the foundation of the university.
Sather also takes inspiration from other programming languages and paradigms: iterators, design by contract, abstract classes, multiple inheritance, anonymous functions, operator overloading, contravariant type system.
The original Berkeley implementation has been adopted by the Free Software Foundation therefore becoming GNU Sather. Last stable GNU version was released in July 2007 and the software is currently not maintained. There were several other variants: Sather-K from the University of Karlsruhe; Sather-W from the University of Waikato ; Peter Naulls' port of ICSI Sather 1.1 to RISC OS; and pSather, a parallel version of ICSI Sather addressing non-uniform memory access multiprocessor architectures but presenting a shared memory model to the programmer.
The former ICSI Sather compiler is implemented as a compiler to C, i.e., the compiler does not output object or machine code, but takes Sather source code and generates C source code as an intermediate language. Optimizing is left to the C compiler.
The GNU Sather compiler, written in Sather itself, is dual licensed under the GNU GPL & LGPL.

Hello World


class HELLO_WORLD is
main is
#OUT+"Hello World\n";
end;
end;

A few remarks:

class MAIN is
main is
loop
i := 1.upto!;
#OUT + i + "\n";
end;
end;
end;

This program prints numbers from 1 to 10.
The loop... end construct is the preferred means of defining loops. Within the construct, one or more iterators may be used. Iterator names always end with an exclamation mark. upto! is a method of the integer class INT accepting one once argument, meaning its value will not change as the iterator yields. upto! could be implemented in the INT class like this:

upto!:SAME is
i: INT := self; -- initialise i to the value of self,
-- that is the integer of which this method is called
loop
if i>m then
quit; -- leave the loop when i goes beyond m
end;
yield i; -- else use i as return value and stay in the loop
i := i + 1; -- and increment
end;
end;

Type information for variables is denoted by a postfix syntax variable:CLASS. The type can often be inferred and thus the typing information is optional, like in anInteger::=1. SAME is a convenience pseudo-class referring to the current class.