[comp.lang.pascal] The Olivetti Modula-3 Distribution

mjj@stl.olivetti.com (Mick Jordan) (06/06/89)

                The Olivetti Modula-3 Distribution
                ---------------------------------- 

Modula-3 [1] is a new programming language that adds objects, threads,
exceptions and garbage collection to Modula-2.  We are developing a set of
tools to support software development in Modula-3.  Our intent is to make the
tools widely available and we plan to distribute them during the third quarter
of this year.

Tools
-----
The Modula-3 tools are built from a collection of packages, written mostly in
Modula-3 but including some C, which are integrated by the use of an abstract
syntax tree (AST) as the intermediate representation of compilation units.
The AST is defined in terms of Modula-3 object types and the majority of the
tools operate directly off this representation.

We are actively developing a variety of tools to support Modula-3 development.
However, in order to make a basic system available quickly, not all of these
tools will be provided in the first distribution.  The initial set will
definitely contain the following:

 *  A compiler that translates from Modula-3 source to object code,
    by way of C source as an intermediate step.  Our use of C is quite
    high-level, hence there is a close similarity between names and types
    in the Modula-3 and C domains.  This makes it possible to debug via the
    generated C code.  The compiler is structured such that it is easy to
    replace the C code-generator with an alternative.

 *  A pre-linker which verifies the consistent compilation rules of
    Modula-3, computes module initialisation order, and builds the program
    with the target machine linker.

 *  A 'makefile' generator for Modula-3 libraries and programs.

Other tools that we are working on and will include in the distribution
if they are solid enough, include the following:

 *  A tool to generate Modula-3 code to save and restore data structures
    from persistent storage in a type-safe manner.

 *  A tool to build skeleton modules from interfaces.

 *  A pretty printer for Modula-3 source.

 *  A Modula-3 interpreter, operating off the AST. 

 *  A tool to build interfaces and modules from a generic specification.

 *  A source-level debugger with a point and show interface.

 *  An interactive compiler tool that monitors changes made to source files
    and performs recompilations automatically.  This replaces the use of
    'make' and provides a fast compilation environment. 

 *  A remote procedure call stub generator.


Run-time Library
----------------- 
The distribution will contain a library suitable for typical systems-
programming applications.  We are taking a simple approach to the basic
run-time environment to avoid creating unnecessary obstacles to portability.
The only significant run-time support is the garbage collector, which is by
Boehm and Weiser [2].  The library will contain a number of modules (30 or
so), some completely portable and some that are operating system dependent.
It includes an IO system, based on an extensible set of stream classes.

Tool Portability
-----------------
We are developing the tools to run on Sun-3 hardware under SunOS 3.5/4.0 and
on DEC VAX running Unix(*) BSD 4.3.  We expect that portability of the tools
to other Unix targets will be straightforward, since we make little or no use
of facilities that pose portability problems.  Porting it to other operating
systems will require more work, but the changes should be well localised. 

References
----------
[1] The Modula-3 Report,
    L. Cardelli, J. Dohnaue, L. Glassman, M. Jordan, B. Kalsow, G. Nelson,
    DEC Systems Research Center, Palo Alto, CA and
    Olivetti Research Center, Menlo Park, CA, Aug 88.

[2] Garbage Collection in an Uncooperative Environment,
    Hans Boehm and Mark Weiser,
    Software, Practice and Experience, Sep 88, pp. 807-820.


How to reach us
---------------
If you would like further information, or would like to receive a copy of the
distribution, please send e-mail to modula-3@stl.olivetti.com (or
modula-3@oli-stl.uucp).  Or write to us at:

Olivetti Software Technology Laboratory
2882 Sand Hill Road, Suite 115
Menlo Park, CA 94025
USA

The Modula-3 Tools Project Team
-------------------------------
The distribution is being developed by David Chase of Olivetti Research Center
and Steve Glassman, Mick Jordan, Trevor Morris and Marion Sturtevant of
Olivetti Software Technology Laboratory.

(*) Unix is a trademark of AT&T Bell Laboratories.

mjj@stl.olivetti.com (Mick Jordan) (11/18/89)

                The Olivetti Modula-3 Distribution
                ---------------------------------- 

Modula-3 [1] is a new programming language that adds objects, threads,
exceptions and garbage collection to Modula-2.  We have developed a 
programming environment for Modula-3, which we are making available at
no charge, under a simple licence agreement.

Tools
-----
The Modula-3 tools are built from a collection of packages, written mostly in
Modula-3 but including some C, which are integrated by the use of an abstract
syntax tree (AST) as the intermediate representation of compilation units.
The AST is defined in terms of Modula-3 object types and the majority of the
tools operate directly off this representation.

The tools that are included in the distribution are:

 *  A compiler that translates from Modula-3 source to object code,
    by way of C source as an intermediate step.  Our use of C is quite
    high-level, hence there is a close similarity between names and types
    in the Modula-3 and C domains.  This makes it possible, although by
    no means easy, to debug via the generated C code.  The compiler is 
    structured such that it would be fairly easy to replace the C code-
    generator with an alternative.

 *  A pre-linker which verifies the consistent compilation rules of
    Modula-3, computes module initialisation order, and builds the program
    with the target machine linker.

 *  A 'makefile' generator for Modula-3 libraries and programs.

 *  A tool which generates Modula-3 code to save and restore data structures
    from persistent storage in a type-safe manner.

 *  A tool to build skeleton modules from interfaces.

 *  A pretty printer for Modula-3 source.

 *  A tool to build parameterised interfaces and modules from a generic 
    specification.

 *  A compiler 'server' which maintains a cache of interfaces
    and so provides fast response to requests for new compilations.
    It also offers some browsing facilities.

The programming environment is designed to be extensible, by virtue of the AST
and a collection of reusable compiler components. We expect to add more
tools over time, and hope that others will be motivated to do so. 
Documentation on the the internals of the environment and how it can be 
extended is in preparation.

Run-time Library
----------------- 
The distribution contains a library suitable for typical systems-
programming applications.  We have taken a simple approach to the basic
run-time environment to avoid creating unnecessary obstacles to portability.
The only significant run-time support is the garbage collector, which is by
Boehm and Weiser [2].  The library contains about 70 modules, some completely 
portable and some that are operating system dependent. It includes an IO 
system, based on an extensible set of stream classes. We have fairly complete
interfaces to Unix(+) and are working on an interface to the X(*) window 
system C library.

Tool Portability
-----------------
We developed the tools on Sun-3 hardware under SunOS 3.5.  We have also 
installed the system under SunOS 4.0, on a Sparcstation and on a VAX running 
Unix BSD 4.3 or Ultrix.  We are porting the system to a DEC 3100 (MIPS) 
workstation and a 386 running Mach.  We expect that portability of the tools
to other Unix targets will be straightforward, since we make little use
of facilities that pose portability problems.  Porting it to other operating
systems will require more work, but the changes should be well localised. 

Status and System Requirements
------------------------------
At the time of writing we have a limited release available for alpha-test.  
A full beta-test system is scheduled for early December. The system requires
a minimum of 8MB of main memory. 

How to acquire the system
-------------------------
To receive the system you must send us two signed copies of the licence 
agreement, which is available by anonymous ftp from 'orc.olivetti.com, in the 
file 'pub/modula-3-info/licence'.  If you can't reach us via ftp, send e-mail
or paper-mail, and tell us what system(s) you want to run Modula-3 on
and what kind of tape you prefer. We are not doing tape distribution for the
alpha-release. Our address is:

Modula-3
Olivetti Software Technology Laboratory
2882 Sand Hill Road, Suite 115
Menlo Park, CA 94025
USA

E-mail: modula-3@stl.olivetti.com
        modula-3@oli-stl.uucp

N.B. You are free (and encouraged) to post this message as widely as possible.

References
----------
[1] The Modula-3 Report (Revised),
    L. Cardelli, J. Dohnaue, L. Glassman, M. Jordan, B. Kalsow, G. Nelson,
    DEC Systems Research Center, Palo Alto, CA and
    Olivetti Research Center, Menlo Park, CA, Nov 89.

[2] Garbage Collection in an Uncooperative Environment,
    Hans Boehm and Mark Weiser,
    Software, Practice and Experience, Sep 88, pp. 807-820.

N.B. A compressed Postscript(-) version of the report is available via 
anonymous ftp from 'orc.olivetti.com' in 'pub/modula-3-info/M3Report.ps.Z'.

(+) Unix is a trademark of AT&T Bell Laboratories.
(*) X Window System is a trademark of Massachusetts Institute of Technology
(-) PostScript is a trademark of Adobe Systems Incorporated.