Sather
GNU project | |
---|---|
First appeared | 1990 |
Stable release | 1.2.3[1]
/ 7 July 2007 |
strong | |
Website | www |
Major implementations | |
ICSI Sather, GNU Sather | |
Influenced by | |
Eiffel, CLU, Common Lisp, Scheme | |
Influenced | |
Cool |
Sather is an
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 also takes inspiration from other programming languages and paradigms:
type system.The original Berkeley implementation (last stable version 1.1 was released in 1995, no longer maintained
The former ICSI Sather compiler (now GNU Sather) is implemented as a compiler to
The GNU Sather compiler, written in Sather itself, is
Hello World
class HELLO_WORLD is
main is
#OUT+"Hello World\n";
end;
end;
A few remarks:
- Class names are ALL CAPS; this is not only a convention but it's enforced by the compiler.
- The method called
main
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: It calls thecreate
method of the class whose name follows the operator. In this example, it's used for instantiating theOUT
class, which is the class for the standard output.- The
+
operator has been overloaded by the class to append the string passed as argument to the stream. - 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.
Example of iterators
This program prints numbers from 1 to 10.
class MAIN is
main is
loop
i := 1.upto!(10);
#OUT + i + "\n";
end;
end;
end;
The loop
... end
construct is the preferred means of defining loops, although while
and repeat
-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 INT
class accepting one once
argument, meaning its value won't change as the iterator yields. upto!
could be implemented in the INT
class with code similar to the following one.
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 the postfix syntax variable:CLASS
. The type can often be inferred and thus the typing information is optional, as in anInteger::=1
. SAME
is a pseudo-class referring to the current class.
References
- ^ https://directory.fsf.org/wiki/sather.
{{cite web}}
: Missing or empty|title=
(help) - ^ "ICSI Sather future plans". Archived from the original on 2012-02-05. Retrieved 2012-03-02.
- ^ "GNU Sather downloads". Archived from the original on 2012-04-05. Retrieved 2012-03-02.
- ^ Sather-K project page (archive from year 2001)
- ^ "Sather-K 0.9 download, version from year 1994". Archived from the original on 2024-04-29. Retrieved 2012-03-02.
- ^ Sather-W 1.3 project page (archived link from year 2002)
- ^ Peter Naulls' port is no longer available on the Web.
- ^ "pSather description". Archived from the original on 2012-02-05. Retrieved 2012-03-02.
- ^ "pSather download". Archived from the original on 2017-07-06. Retrieved 2021-10-11.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)
External links
"Sather Home Page". Archived from the original on 2024-03-25. Retrieved 2025-01-16.