- Sather
Infobox programming language
name = Sather
logo =
paradigm = object-oriented, functional
year = 1990
designer =Steve Omohundro
developer =Free Software Foundation ,University of Karlsruhe ,University of Waikato
latest release version =
latest release date =
typing = static, strong
implementations = GNU Sather, Sather-K, Sather-W
dialects =
influenced_by = Eiffel
influenced = CoolSather is an
object-oriented programming language . It originated circa 1990 at the International Computer Science Institute at theUniversity of California, Berkeley , developed by an international team led bySteve Omohundro . It supports garbage collection and generics bysubtypes .Originally, it was based on Eiffel, but it has diverged, and now includes several
functional programming features. It is probably best to view it as an object-oriented language, with many ideas borrowed from Eiffel. Even the name is inspired by Eiffel; theSather Tower is a recognizable landmark at Berkeley. Sather also takes inspiration from other programming languages and paradigms:iterator s,design by contract ,abstract class es,multiple inheritance ,anonymous function s,operator overloading , contravariant type system. Some of these features are normally only found in functional programming languages.The original Berkeley implementation is now maintained by many people, not all at Berkeley, and has been adopted by the
Free Software Foundation therefore becoming GNU Sather. There are at least two other implementations: Sather-K from theUniversity of Karlsruhe , and Sather-W from theUniversity of Waikato .The former ICSI sather compiler (now GNU Sather) 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 anintermediate language . Optimizing is by the C compiler, Sather code often performs better than the correspondingC++ code, and the generated C code can always be optimized by hand.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 "; end; end;
A few remarks:
* Class names are ALL CAPS; this is not only a convention but is enforced by the compiler.
* The method calledmain
is the entry point for execution. It may belong to any class, but if this is different fromMAIN
, it must be specified as a compiler option.
*#
is the constructor symbol, calling methodcreate
of the corresponding class; here it is used for instantiating theOUT
class, which is actually stdout.
* The+
operator has been overloaded here to stand for stream append.
* Operators such as+
are syntactic sugar for conventionally-named method calls:a + b
stands fora.plus(b)
. The usual arithmetic precedence conventions are used to resolve the calling order of methods in complex formulae.
* The program layout allows for pre- and post-conditions (not shown here), showing Sather's Eiffel lineage.Example of iterators
class MAIN is main is loop i := 1.upto!(10); #OUT + i + " "; end; end; end;
This program prints numbers from 1 to 10.
The
loop
...end
construct is the preferred means of defining loops (althoughwhile
andrepeat
-until
are also available). Within the construct, one or more iterators may be used. Iterator names always end with an exclamation mark (this convention is enforced by the compiler).upto!
is a method of the integer classINT
accepting oneonce
argument, meaning its value will not change as the iterator yields.upto!
could be implemented in theINT
class like this:upto!(once m:INT):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 inanInteger::=1
.SAME
is a convenience pseudo-class referring to the current class.External links
* [http://www.icsi.berkeley.edu/~sather/ Sather homepage]
* [http://www.gnu.org/software/sather/ Gnu Sather]
Wikimedia Foundation. 2010.