-----------------------------------------------------------------
	       Sather Frequently Asked Questions
-----------------------------------------------------------------

This is the Sather FAQ.  If you have suggestions for the inclusion of
other useful information, please send email to "davids@icsi.berkeley.edu".

Table of contents
-----------------

  1.  What is Sather?
  2.  Is Sather a subset or superset of Eiffel?
  3.  Where does the name "Sather" come from?  How do I pronounce it?
  4.  What does the "Hello World" program look like?
  5.  Where can I get information on Sather?
  6.  Are there freely available implementations of Sather?
  7.  How portable is the compiler?
  8.  How efficient is the compiler?
* 9.  I'm interested in working on a library class.  Who is currently
      working on what classes?
* 10. What is the future of Sather?
  11. What is all this about covariance vs. contravariance?

* - indicates questions which have changed in this release of the FAQ.


1. What is Sather?

Sather is an object oriented language which aims to be simple,
efficient, safe, and non-proprietary. It aims to meet the needs of
modern research groups and to foster the development of a large,
freely available, high-quality library of efficient well-written
classes for a wide variety of computational tasks. It was originally
based on Eiffel but now incorporates ideas and approaches from several
languages. One way of placing it in the "space of languages" is to say
that it attempts to be as efficient as C, C++, or Fortran, as elegant
and safe as Eiffel or CLU, and to support higher-order functions as
well as Common Lisp, Scheme, or Smalltalk.

Sather has garbage collection, statically-checked strong typing,
multiple inheritance, separate implementation and type inheritance,
parameterized classes, dynamic dispatch, iteration abstraction,
higher-order routines and iters, exception handling, assertions,
preconditions, postconditions, and class invariants.  Sather code can
be compiled into C code and can efficiently link with C object files.

Sather has a very unrestrictive license aimed at encouraging
contribution to the public library without precluding the use of
Sather for proprietary projects.



2. Is Sather a subset or superset of Eiffel?

Neither. Valid Eiffel programs are not Sather programs, nor vice
versa.  Sather 0.2 was closer to being a subset of Eiffel 2.0 but even
then introduced several distinct constructs primarily to improve
computational performance. Eiffel 3.0 has expanded significantly in a
different direction. Sather 1.0 has introduced several new constructs
(eg. iteration abstraction, higher order routines, object
constructors, routine and iter overloading, contravariant class
interfaces, typecase) which makes the two languages quite distinct
now.


3. Where does the name ``Sather'' come from? How do I pronounce it?

The Sather language gets its name from the Sather Tower (popularly
known as the Campanile), the best-known landmark of the University of
California at Berkeley.  A symbol of the city and the University, it
is the Berkeley equivalent of the Golden Gate bridge.  Erected in
1914, the tower is modeled after St. Mark's Campanile in Venice,
Italy. It is smaller and a bit younger than the Eiffel tower, and
closer to most Americans -- and lovers of Venice of course.  Yet, at
307 feet it houses 50 tons of human, dinosaur and other animal bones
mostly collected from the La Brea Tar Pits.  Unseen by most visitors
the collection covers six floors of the tower. The way most people say
the name of the language rhymes with "bather".


4. What does the ``Hello World'' program look like?

-----------------------------------------------------------------
    class MAIN is
       main is #OUT + "Hello World!\n" end
    end
-----------------------------------------------------------------


5. Where can I get information on Sather?

The best way is to check out the Sather WWW page at

    http://www.icsi.berkeley.edu/Sather

There is a newsgroup "comp.lang.sather" that is devoted to
discussion of Sather issues.

There is a Sather mailing list maintained at the International Computer
Science Institute (ICSI). Since the formation of the newsgroup, this
list is primarily used for announcements.  To be added to or deleted
from the Sather list, send a message to

    sather-request@icsi.berkeley.edu

If you have problems with Sather or related questions that are not of
general interest, mail to

    sather-bugs@icsi.berkeley.edu

This is also where you want to send bug reports and suggestions for
improvements.


6. Are there freely available implementations of Sather?

The ICSI Sather 1.0 compiler can be obtained by anonymous ftp at

    ftp.icsi.berkeley.edu:  /pub/sather

These sites also mirror the Sather distribution:

    ftp.sterling.com:       /programming/languages/sather
    ftp.uni-muenster.de:    /pub/languages/sather
    maekong.ohm.york.ac.uk: /pub/csp

I am looking for reliable sites on other continents to mirror the
Sather distribution and be included in this FAQ.  If you can help with
this, please send me mail.

There is another dialect of Sather called Sather-K that is being
developed at the University of Karlsruhe, where it has been used in
undergraduate instruction.  The library of Sather-K is Karla, the
KARlsruhe Library or Algorithms, and it has been used in graduate
courses on algorithms and object-oriented design.  Sather 1.0 and
Sather-K are conceptually quite close and we intend to have them
converge in the future; we hope by the summer of 1995.

The Sather-K compiler and library are available at

    i44ftp.info.uni-karlsruhe.de:  /pub/sather and /pub/Karla

as well as at the ICSI ftp site in pub/sather/Sather-K.


7. How portable is the compiler?

The compiler generates ANSI C and has very few Unix dependencies
which can be fixed if we find out what they are; if your machine runs
gcc, you should be able to port the compiler.

So far it has been ported to the following systems, that I know of:

    SunOS 4.1.3
    SunOS 5.3
    Ultrix 4.3
    NetBSD 1.0
    Linux 1.0.8
    SCO Unix 3.2.4
    SGI, IRIX 4.0.5H, IRIX 5.2
    Sony NEWSOS 4.1R
    MIPS RISC os 4.53C
    Alpha, DEC OSF/1 V2.0 and V3.0
    FreeBSD 1.1.5.1
    HPUX 8.07
    OS/2
    Mac (Metrowerks v4.5, PPC)


8. How efficient is the compiler?

On my Sparc 10 the Sather -> C translate of the compiler takes ~51
seconds, and the "hello world" program takes ~22 wall clock seconds
Sather -> C -> executable (using gcc).  YMMV, especially if you have
less than 32MB memory.

The current bottleneck is in compiling the generated C; a parallel make
utility helps.  At some point we will make the C compilation
incremental to get around this.

Because we can take advantage of the C compiler's optimizer, the
generated code can range from fair to pretty good.


9. I'm interested in working on a library class.  Who is currently
working on what classes?

There are many people helping to extend and improve the Sather
libraries.  ICSI encourages free exchange of useful code; if you have
code you think others will find useful, please submit it.  Here are
some contacts; the newsgroup is a useful resource for finding people
with similar interests.

    mbk@inls1.ucsd.edu:             Matrix/vector, numerical, fortran 
    gomes@icsi.berkeley.edu:        Browser, graph classes, neural nets
    lewikk@aud.alcatel.com:	    Emacs support
    sather-bugs@icsi.berkeley.edu:  General questions

Many people have contributed code, which can be found in the Contrib/
directory of the distribution.


10. What is the future of Sather?

Several institutions have expressed interest in using Sather as a
teaching language. Its combination of simplicity, support for modern
programming concepts, and free availability should make it ideal for
this purpose.

Ultimately there will be a better development environment; we envision
an interpreter/on-the-fly compiler.  This won't be too hard to do
because the compiler already emits an abstract machine representation
that is appropriate for interpretation.  There are presently students
working on extensions to the compiler as class projects, and an lcc
back-end is likely at some point.  A version of the C generator that
selectively recompiles only the C files which have changed is another
possibility.

The specification for Sather 1.1 is in progress.  It will be
upward-compatible with Sather 1.0 code.  Likely improvements will be
copy-out arguments, improved external classes, and matrix classes using
BLAS.  Sather 1.1 should be available this summer.

Parallel Sather (pSather) is a parallel version of the language,
developed and in use at ICSI.  pSather addresses
non-uniform-memory-access multiprocessor architectures but presents a
shared memory model to the programmer.  It extends serial Sather with
threads, synchronization and data distribution.  Unlike actor
languages, multiple threads can execute in one object.  A distinguished
class GATE combines various dependent low-level synchronization
mechanisms efficiently: locks, futures, and conditions.  The new
version of the pSather compiler is being integrated into the serial
Sather 1.0 compiler.  More information on pSather is available at the
WWW page.


11. What is all this about covariance vs. contravariance?

A religious war occasionally crops up on the net with people arguing
about whether covariance or contravariance is best.  If you haven't
heard of either, don't worry about it.

Sather is contravariant.  That means that it isn't possible to get type
errors at runtime.  It also means that some ways of doing
object-oriented programming will require that you, the Sather
programmer, insert _explicit_ type checks (using a typecase) in places
where a covariant compiler would have inserted an implicit check for
you.  We choose contravariance because it eliminates a potential source
of bugs that can't be discovered at compile time; other language
designers have choosen the opposite to allow more expressiveness.
Eiffel says toMAHto, we say toMAYto.
