Sather

From Wikipedia, the free encyclopedia

Sather
Paradigm: object-oriented, functional
Appeared in: 1990
Designed by: Steve Omohundro
Developer: Free Software Foundation, University of Karlsruhe, University of Waikato
Typing discipline: static, strong
Major implementations: GNU Sather, Sather-K, Sather-W
Influenced by: Eiffel

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. 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; the Sather Tower is a recognizable landmark at Berkeley. 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. 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. There are at least two other implementations: Sather-K from the University of Karlsruhe, and Sather-W from the University of Waikato.

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 an intermediate language. Optimizing is by the C compiler, Sather code often performs better than the corresponding C++ code, and the generated C code can always be optimized by hand.

Sather is dual licensed under the GNU GPL & LGPL.

[edit] Hello World

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

[edit] Example of iterators

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

This program prints numbers from 1 to 10.

[edit] External links