Subject: Modula-3 Frequently Asked Questions (FAQ)
Supersedes: <m3_778254318@vlsi.polymtl.ca>
Date: 27 Mar 1996 02:11:07 GMT



                       MODULA-3 FAQ, WWW AND FTP ARCHIVE
                                       
   
   
   This tree of documents, programs and binaries references most of the
   material available on the Modula-3 language, compiler and libraries.
   It should answer all the most frequently asked questions about
   Modula-3. Items on this site are submitted by a large number of
   individuals. Michel Dagenais (dagenais@vlsi.polymtl.ca) is maintaining
   this service. Please send him any suggestions for improvements.
   
   The postscript version of the FAQ is available on
   ftp.vlsi.polymtl.ca:pub/m3/faq.ps. An hypertext WWW version is found
   on http://www.vlsi.polymtl.ca/m3.
   
   For submitting new items or improving existing items please use the
   automatic submission procedure
   (http://www.vlsi.polymtl.ca/m3/pkg/misc/submit)
   
Introduction

   
   
  WHAT IS NEW?
  
   
   
   SRC Modula-3 release 3.5.2 came out. The speeding up of the compiler
   is well under way and there are new ports to IRIX 5.2, FreeBSD, LINUX
   ELF and Windows/NT (with Trestle not finished porting). The FAQ and
   WWW/FTP servers in vlsi.polymtl.ca have been reorganized to facilitate
   the contribution of Modula-3 related items.
   
  WHAT IS MODULA-3?
  
   
   
   Modula-3 is a systems programming language that descends from Mesa,
   Modula-2, Cedar, and Modula-2+. It also resembles its cousins Object
   Pascal, Oberon, and Euclid.
   
   The goal of Modula-3 is to be as simple and safe as it can be while
   meeting the needs of modern systems programmers. Instead of exploring
   new features, they studied the features of the Modula family of
   languages that have proven themselves in practice and tried to
   simplify them into a harmonious language. They found that most of the
   successful features were aimed at one of two main goals: greater
   robustness, and a simpler, more systematic type system.
   
   Modula-3 retains one of Modula-2's most successful features, the
   provision for explicit interfaces between modules. It adds objects and
   classes, exception handling, garbage collection, lightweight processes
   (or threads), and the isolation of unsafe features.
   
  WHERE CAN I GET A DESCRIPTION OF MODULA-3?
  
   
   
   The language definition and most electronically available Modula-3
   information can be accessed on the Modula-3 home page
   (http://www.research.digital.com/SRC/modula-3/html/home.html)
   
   For some of these documents, including the language definition, is
   available a Postscript version
   (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc)
   
  WHAT IS SRC MODULA-3?
  
   
   
   SRC-Modula-3
   (file://gatekeeper.dec.com/pub/DEC/Modula-3/release-3.5.2) was built
   by the DEC Systems Research Center. In Europe it is also available
   from ftp-i3.informatik.rwth-aachen.de in pub/Modula-3. The most recent
   version is release 3.5.2
   
   The DEC SRC Modula-3 release 3.5.2 contains the following:
   
     * A native code compiler: uses the GCC backend; on
       machines/operating systems that have self-describing stacks, an
       optimized exception handling mechanism is provided, on other
       architectures, setjmp/longjmp is used. A very fast integrated
       backend is available on some platforms (currently NT386).
       
       The compilation system provides for minimal recompilation. Only
       those units that depend on the modified interface item will be
       recompiled.
     * m3build: tool that performs dependency analysis and builds the
       Modula-3 programs and libraries.
     * m3gdb: a Modula-3 aware version of GDB.
     * Several tools for performance and coverage analysis.
     * A large standard library (libm3) providing
       
          + A multithread, incremental, generational, conservative
            garbage collector
          + Text manipulation.
          + Generic Containers: Lists, Sequences, Tables, SortedLists,
            SortedTables
          + Atoms and Symbolic expressions (Lisp like lists)
          + An extensible stream IO system
          + Typesafe binary object transcription (persistent objects)
          + Operating system interfaces
          + Portable interfaces to the language runtime
   
       
       All standard libraries are thread-friendly. Modula-3 can readily
       link with existing C libraries; many libraries including X11R4 and
       various UNIX libraries are available as part of libm3.
     * Several other libraries for designing graphical user interfaces
       and distributed applications.
       
   
   
Supported platforms

   
   
   Two implementations are available, SRC Modula-3 and a PC version of it
   (m3pc).
   
   As far as we know, implementations are not available for VMS and for
   the Macintosh.
   
   There are versions for the architectures listed below. While SRC can
   test on DS3100, ALPHA/OSF, Windows NT and LINUX, it can only rely on
   what users on other platforms tell them to integrate all the platform
   specific code.
   
     * AIX386: IBM PC running AIX/PS2,
     * AOSF: DEC Alpha AXP running OSF/1
     * AP3000: Apollo DN4500 running Domain/OS
     * ARM: Acorn R260 running RISC iX 1.21
     * DS3100: DECstation 3100 and 5000 running Ultrix 4.0 and 4.2
     * HP300: HP 9000/300 running HP-UX 8.0
     * HPPA: HP 9000/700, 9000/800 running HP-UX 8.0
     * IBMR2: IBM R6000 running AIX 3.1,
     * IBMRT: IBM RT running IBM/4.3,
     * LINUX: Intel 386 running LINUX
     * NEXT: NeXT running ??
     * NT386: Intel 386 running Windows NT
     * OKI: Okidata 7300 (i860) running UNIX SVR4.0
     * SEQUENT: Sequent computers running ??
     * SOL2: Sparc running Solaris 2.x
     * SPARC: SPARCstation running SunOS 4.1.x
     * SUN3: SUN3 running SunOS
     * SUN386: Sun 386i running SunOS 4.0.1
     * UMAX: Encore Multimax running UMAX 4.3 (R4.1.1)
     * VAX: VAX running Ultrix 3.1
       
   
   
   The new native compiler is based on GCC and should be fairly easy to
   port. Except for the very lowest levels of the thread implementation,
   the entire system is written in Modula-3.
   
   A number of binaries are available for FTP. If you are willing to
   provide binaries for other architectures, please contact
   dagenais@vlsi.polymtl.ca; they may be put on his FTP server or links
   to your server can be included. The full SRC Modula-3 source code tree
   (http://www.vlsi.polymtl.ca/m3/binaries/../pkg/SRC-m3) is available
   on-line.
   
  MODULA-3 ON AIX
  
   
   
   Bob Barton (barton@chopin.eche.ualberta.ca) is working on a port to
   AIX 3.2.5 for RISC/6000.
   
  MODULA-3 ON DOS
  
   
   
   A newer version of PC Modula-3 (m3pc)
   (file://gatekeeper.dec.com/pub/DEC/Modula-3/contrib/M3forDOS), code
   named EX32 in the README file, is available.
   
   From the README, written by Klaus Preschern:
   
   EX32 (A 32-bit Extension of DOS) is an environment for the
   developement and execution of 32-bit applications with DOS.
   
   EX32 is a collection of DOS programs (drivers + kernel). It provides
   services for applications executed in protected mode. It does process
   management, virtual memory management, interprocess communication via
   pipes and it offers a file system with 32 character filenames.
   
   EX32 runs on MS-DOS 5.00, 6.00 and 6.02. You need a i386/i387
   (coprocessor required) or upward (i486, Pentium). EX32 supports DOS
   XMS memory (but not EMS, VCPI or DPMI). No support for the i286. You
   should have at least 4 MB memory (8 MB or more recommended). The whole
   package occupies unzipped and untared approximately 44 MB of disk
   space.
   
   EX32 comes with GNU C++ (version 2.4.5), SRC Modula-3 (version 3.1,
   including threads), two C libraries, a graphics library for VGA and a
   number of commands (i.e. ls, cp, rm, mkdir, make, ...).
   
   Note: This is a system for experienced programmers! They should be
   familiar with Unix and DOS.
   
  MODULA-3 ON FREEBSD
  
   
   
   Olaf Wagner (olaf@logware.de) is offering binaries on the i386 FreeBSD
   platform.
     * SCR Modula-3 3.3 binaries for FreeBsd
       (http://www.vlsi.polymtl.ca/m3/binaries/FREEBSD/m3-3.3) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/FREEBSD/m3-3.3.tar.Z)
     * SRC Modula-3 3.5.1 for FreeBsd
       (http://www.vlsi.polymtl.ca/m3/binaries/FREEBSD/m3-3.5.1) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/FREEBSD/m3-3.5.1.tar.Z)
       
  MODULA-3 ON HP PRECISION ARCHITECTURE
  
   
   
   Bert Laverman (laverman@cs.rug.nl) is providing binaries for HPPA
   workstations.
     * SRC Modula-3 3.3 for HP Precision Architecture (HPPA)
       (http://www.vlsi.polymtl.ca/m3/binaries/HPPA/m3-3.3) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/HPPA/m3-3.3.tar.Z)
       
  MODULA-3 ON LINUX (I386-A.OUT)
  
   
   
   Michel Dagenais (dagenais@vlsi.polymtl.ca) is providing binaries for
   LINUX.
     * SRC Modula-3 3.4 for LINUX
       (http://www.vlsi.polymtl.ca/m3/binaries/LINUX/m3-3.4) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/LINUX/m3-3.4.tar.Z)
       
  MODULA-3 ON THE NEXT (68000)
  
   
   
   Thomas Neumann (tom@smart.ruhr.de) is providing binaries for Modula-3
   on NeXT.
     * SRC Modula-3 3.3 for NEXT (680x0)
       (http://www.vlsi.polymtl.ca/m3/binaries/NEXT/m3-3.3) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/NEXT/m3-3.3.tar.Z)
       
  MODULA-3 ON OS/2
  
   
   
   Hendrick Boom (hendrick@CAM.ORG) and Craig Andrew Kingston
   (ckingsto@undergrad.math.uwaterloo.ca) are working on a port to OS/2.
   The DOS version of Modula-3 may be used in DOS emulation under OS/2.
   
  MODULA-3 ON LINUXELF (I386-LINUXELF)
  
   
   
   Michel Dagenais (dagenais@vlsi.polymtl.ca) is providing binaries for
   LINUX using the new ELF binary format; shared libraries are much
   easier to build under ELF.
     * SRC Modula-3 3.5.1 for LINUXELF
       (http://www.vlsi.polymtl.ca/m3/binaries/LINUXELF/m3-3.5.1) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/LINUXELF/m3-3.5.1.tar.Z
       )
       
  MODULA-3 ON SPARC
  
   
   
   Farshad Nayeri (nayeri@gte.com) is maintaining release notes
   (ftp://ftp.gte.com/pub/m3) for the SPARC port. Michel Dagenais
   (dagenais@vlsi.polymtl.ca) offers binaries.
     * SRC Modula-3 3.4 for SPARC
       (http://www.vlsi.polymtl.ca/m3/binaries/SPARC/m3-3.4) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/binaries/SPARC/m3-3.4.tar.Z)
       
Modula-3 packages

   
   
   Send to m3-request@src.dec.com what you are willing to share, be it
   programs, libraries or other things. They will be put in the
   distribution.
   
   You may also make packages available on the ftp.vlsi.polymtl.ca server
   using the automatic submission package
   (http://www.vlsi.polymtl.ca/m3/pkg/misc/submit).
   
  MODULA-3 PACKAGES
  
   
   
     * X11R4: X11R4 implements a Modula-3 interface to the X library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/X11R4) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/X11R4.tar.Z)
     * badbricks: a Modula-3 game similar to minesweeper
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/badbricks) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/badbricks.tar.Z)
     * bicycle: bicycle is a library of playing card images.
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/bicycle) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/bicycle.tar.Z)
     * calculator: a 10-key calculator using FormsVBT
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/calculator) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/calculator.tar.Z)
     * cg-burs: an experimental Modula-3 back-end that uses BURS
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/cg-burs) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/cg-burs.tar.Z)
     * codeview: support for animated views of source code, needed by
       zeus (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/codeview) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/codeview.tar.Z)
     * columns: a Modula-3 version of the PC game, columns
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/columns) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/columns.tar.Z)
     * cube: a rotating cube
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/cube) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/cube.tar.Z)
     * dps: a thin Modula-3 veneer on the display Postscript extensions
       to X (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/dps) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/dps.tar.Z)
     * dpsslides: a program to display postscript slides in X
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/dpsslides) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/dpsslides.tar.Z)
     * coverage: a line-based coverage analyzer/profiler
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/coverage) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/coverage.tar.Z)
     * fisheye: a demo of "fisheye" views for graph browsing
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/fisheye) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/fisheye.tar.Z)
     * formsedit: a 1-1/2 view GUI editor for FormsVBT expressions
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/formsedit) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/formsedit.tar.Z)
     * formsvbtpixmaps: misc. bitmaps, cursors and stuff used by formsvbt
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/formsvbtpixmaps) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/formsvbtpixmaps.tar.Z
       )
     * gnuemacs: a library of useful E-lisp code for Modual-3-mode in
       gnuemacs (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/gnuemacs) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/gnuemacs.tar.Z)
     * images: support for displaying bitmap images
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/images) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/images.tar.Z)
     * jvideo: a low-level interface to the J-video hardware, needed by
       videovbt (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/jvideo) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/jvideo.tar.Z)
     * llscan: a little mh program used by Postcard
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/llscan) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/llscan.tar.Z)
     * m3: the Modula-3 compiler (main program)
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3.tar.Z)
     * libm3: libm3 is the library that most others need.
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/libm3) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/libm3.tar.Z)
     * formsvbt: a high-level language based on S-expressions for
       describing user interfaces
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/formsvbt) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/formsvbt.tar.Z)
     * m3back: the Windows/NT x86 back-end
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3back) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3back.tar.Z)
     * m3browser: an HTTP server that provides WWW browsing of the
       installed Modula-3 system
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3browser) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3browser.tar.Z)
     * m3build: the user interface to compiling Modula-3 programs
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3build) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3build.tar.Z)
     * m3build2: an experimental Modula-3 version of m3build
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3build2) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3build2.tar.Z)
     * m3bundle: a program that captures binary data from files as
       Modula-3 source
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3bundle) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3bundle.tar.Z)
     * m3export: tools to create a new version of the SRC M3 distribution
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3export) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3export.tar.Z)
     * m3front: the Modula-3 compiler front-end
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3front) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3front.tar.Z)
     * m3linker: the Modula-3 prelinker
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3linker) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3linker.tar.Z)
     * m3loader: an experimental dynamic loader for Windows/NT
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3loader) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3loader.tar.Z)
     * m3middle: the Modula-3 compiler's IL definition
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3middle) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3middle.tar.Z)
     * m3objfile: the Modula-3 object file writers
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3objfile) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3objfile.tar.Z)
     * m3quake: an experimental callable version of quake
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3quake) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3quake.tar.Z)
     * m3tests: various tests for the Modula-3 compiler
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3tests) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3tests.tar.Z)
     * m3tk: a (large) Modula-3 abstract syntax tree (AST) toolkit
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3tk) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3tk.tar.Z)
     * m3tohtml: a program to convert batches of Modula-3 source to
       interconnected HTML
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3tohtml) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3tohtml.tar.Z)
     * m3tools: a simple Modula-3 scanner
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3tools) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3tools.tar.Z)
     * m3staloneback: an standalone back-end program like m3cc that uses
       m3back (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3staloneback)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3staloneback.tar.Z)
     * m3totex: a program that wraps Modula-3 source in enough TeX to
       make it printable
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3totex) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3totex.tar.Z)
     * m3core: m3core is the minimal base library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3core) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3core.tar.Z)
     * metasyn: a low-level library used by the Obliq interpreter
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/metasyn) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/metasyn.tar.Z)
     * mg: the low-level animation support
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/mg) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/mg.tar.Z)
     * mgkit: a collection of easier-to-use animation widgets
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/mgkit) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/mgkit.tar.Z)
     * mtex: mtex is a quake function that is used to produce
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/mtex) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/mtex.tar.Z)
     * m3zume: the "interesting event" preprocessor needed by zeus
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/m3zume) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/m3zume.tar.Z)
     * netobj: the network objects runtime library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/netobj) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/netobj.tar.Z)
     * netobjd: the network objects daemon
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/netobjd) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/netobjd.tar.Z)
     * mentor: a collection of algoritm animations
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/mentor) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/mentor.tar.Z)
     * obliq: the Obliq interpreter
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliq) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliq.tar.Z)
     * obliqbinanim: the Obliq interpreter with full animation support
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqbinanim) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqbinanim.tar.Z)
     * obliqbinmin: the Obliq interpreter with minimal runtime hooks
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqbinmin) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqbinmin.tar.Z)
     * obliqbinui: the Obliq interpreter with ui support
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqbinui) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqbinui.tar.Z)
     * obliqlibanim: the Obliq interpreter's hooks to the animation
       libraries (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqlibanim)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqlibanim.tar.Z)
     * obliqlibm3: the Obliq interpreter's hooks to the libm3 library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqlibm3) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqlibm3.tar.Z)
     * obliqlibui: the Obliq interpreter's hooks to the ui library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqlibui) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqlibui.tar.Z)
     * obliqparse: the Obliq interpreter's parser
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqparse) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqparse.tar.Z)
     * obliqprint: the Obliq interpreter's value printer
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqprint) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqprint.tar.Z)
     * obliqrt: the Obliq interpreter's runtime library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqrt) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqrt.tar.Z)
     * obliqsrvui: an Obliq "server" with ui support
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqsrvui) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqsrvui.tar.Z)
     * parseparams: a library that helps parse command line arguments.
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/parseparams) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/parseparams.tar.Z)
     * pkgfprint: an internal utility program needed by the package tools
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/pkgfprint) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/pkgfprint.tar.Z)
     * pkgobj: the low-level library support for the package tools
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/pkgobj) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/pkgobj.tar.Z)
     * obliqsrvstd: an Obliq "server" with the standard runtime hooks
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqsrvstd) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqsrvstd.tar.Z)
     * pkgq: the client program(s) needed to manage the package tools
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/pkgq) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/pkgq.tar.Z)
     * pkgsrv: the server daemon required to use the package tools
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/pkgsrv) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/pkgsrv.tar.Z)
     * postcard: an integrated mail/news reader
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/postcard) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/postcard.tar.Z)
     * pp: a Modula-3 pretty-printer
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/pp) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/pp.tar.Z)
     * quake: a simple interpreter used by m3build
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/quake) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/quake.tar.Z)
     * realgeometry: a version of the geometry package (Point, Rect,
       Path, ...) (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/realgeometry)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/realgeometry.tar.Z)
     * rehearsecode: a program to manually test drive source code
       animations (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/rehearsecode)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/rehearsecode.tar.Z)
     * replayheap: a program to graphically display the log captured by
       "recordheap" (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/replayheap)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/replayheap.tar.Z)
     * recordheap: a program to capture a "showheap" trace
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/recordheap) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/recordheap.tar.Z)
     * pkgtool: the client program(s) to access the package tools
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/pkgtool) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/pkgtool.tar.Z)
     * set: a simple, generic Set interface.
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/set) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/set.tar.Z)
     * sharedboard: a prototype shared whiteboard
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/sharedboard) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/sharedboard.tar.Z)
     * showheap: a program to graphically display in real-time the state
       of each heap page.
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/showheap) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/showheap.tar.Z)
     * shownew: a program to graphically display in real-time per-type
       allocations (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/shownew)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/shownew.tar.Z)
     * obliqbinstd: the Obliq interpreter with the "standard" runtime
       hooks (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/obliqbinstd) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/obliqbinstd.tar.Z)
     * slisp: a library containing a small Lisp interpreter
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/slisp) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/slisp.tar.Z)
     * smalldb: an in-memory database library
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/smalldb) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/smalldb.tar.Z)
     * solitaire: a Modula-3 version of SeaHaven towers
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/solitaire) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/solitaire.tar.Z)
     * src: main m3makefile to build all the packages
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/src) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/src.tar.Z)
     * stablegen: a stub generator to make the use of the "stable"
       library much easier
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/stablegen) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/stablegen.tar.Z)
     * stubgen: the network objects stub generator
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/stubgen) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/stubgen.tar.Z)
     * stable: A library providing log-based persistent objects
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/stable) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/stable.tar.Z)
     * showthread: a program to graphically display in real-time the
       state of each thread.
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/showthread) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/showthread.tar.Z)
     * tcl: a thin Modula-3 veneer on the TCL library (version 6.2).
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/tcl) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/tcl.tar.Z)
     * tcp: tcp implements a Modula-3 interface to TCP sockets
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/tcp) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/tcp.tar.Z)
     * tempfiles: a library to build tempfiles
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/tempfiles) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/tempfiles.tar.Z)
     * synloc: a low-level library used by the Obliq interpreter
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/synloc) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/synloc.tar.Z)
     * synex: a low-level "syntax extension" library used by the Obliq
       interpreter (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/synex) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/synex.tar.Z)
     * sil: Sil is a simple drawing program that runs on Windows/NT
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/sil) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/sil.tar.Z)
     * videovbt: a window widget that displays live video images
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/videovbt) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/videovbt.tar.Z)
     * visualobliq: a prototype of an easy-to-use distributed programming
       environment (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/visualobliq)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/visualobliq.tar.Z)
     * vocgi: an HTML/cgi gateway, required to embed Visual Obliq code in
       the WWW. (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/vocgi) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/vocgi.tar.Z)
     * vbtkit: a large collection of useful window widgets
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/vbtkit) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/vbtkit.tar.Z)
     * voquery: a simple query program used by vorun
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/voquery) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/voquery.tar.Z)
     * tetris: a Modula-3 version of Tetris
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/tetris) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/tetris.tar.Z)
     * vorun: a safe visual obliq interpreter suitable for embedding in
       the WWW. (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/vorun) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/vorun.tar.Z)
     * ui: implements the Trestle window-system toolkit
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/ui) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/ui.tar.Z)
     * zeus: the algorithm animation toolkit
       (http://www.vlsi.polymtl.ca/m3/pkg/SRC-m3/zeus) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/SRC-m3/zeus.tar.Z)
       
  CONTRIBUTED MODULA-3 PACKAGES
  
   
   
     * Demo of Analysis and Development environment for Modula-3
       (http://www.vlsi.polymtl.ca/m3/pkg/contrib/ADTenv.html) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/contrib/ADTenv.html.tar.Z)
     * m23gdb a newer version of m3gdb with important fixes for most
       platforms. (http://www.vlsi.polymtl.ca/m3/pkg/contrib/m23gdb.html)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/contrib/m23gdb.html.tar.Z)
     * M2toM3 a translator from Modula-2 to Modula-3
       (http://www.vlsi.polymtl.ca/m3/pkg/contrib/m2tom3.html) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/contrib/m2tom3.html.tar.Z)
     * m3pc an implementation of Modula-3 for PCs.
       (http://www.vlsi.polymtl.ca/m3/pkg/contrib/m3pc.html) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/contrib/m3pc.html.tar.Z)
     * m3tomif (http://www.vlsi.polymtl.ca/m3/pkg/contrib/m3tomif.html)
       (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/contrib/m3tomif.html.tar.Z)
     * m3rpc a Sun RPC system from Xerox Parc
       (http://www.vlsi.polymtl.ca/m3/pkg/contrib/m3rpc.html) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/contrib/m3rpc.html.tar.Z)
       
  MISCELLANEOUS MODULA-3 PACKAGES
  
   
   
     * Computer cache memory simulation and graphical animation
       (http://www.vlsi.polymtl.ca/m3/pkg/misc/cacheanim) (tar
       compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/misc/cacheanim.tar.Z)
     * Submission procedure to ftp.vlsi.polymtl.ca Modula-3 archive
       (http://www.vlsi.polymtl.ca/m3/pkg/misc/submit) (tar compressed)
       (ftp://ftp.vlsi.polymtl.ca/pub/m3/pkg/misc/submit.tar.Z)
       
Modula-3 related projects

   
   
     * idlm3: An OMG IDL to Modula-3 Translator
       (http://www.vlsi.polymtl.ca/m3/project/idlm3.html)
     * ILU, an object-oriented multi-lingual RPC-capable module system
       (http://www.vlsi.polymtl.ca/m3/project/ilu.html)
     * SPIN: a microkernel written in Modula-3
       (http://www.vlsi.polymtl.ca/m3/project/spin.html)
       
Modula-3 documents

   
   
   Hardcopy versions of the DEC SRC research reports
   (http://www.research.digital.com/SRC/publications/src-rr.html) can be
   ordered by e-mail; send your request including a postal mail address
   to src-reports@src.dec.com.
   
  FORMSVBT: USER INTERFACE BUILDING WITH VBTKIT
  
   
   
   ``The FormsVBT Reference Manual'', Marc H. Brown and James R. Meehan,
   (to be a SRC Research Report). A draft version is available in VBTKit
   library
   (file://gatekeeper.dec.com/pub/DEC/Modula-3/contrib/formsvbt.25Mar93.p
   s.Z) and VBTKit applications
   (file://gatekeeper.dec.com/pub/DEC/Modula-3/contrib/formsvbt.AppC.26Ma
   r93.ps.Z)
   
  A TUTORIAL BOOK: MODULA-3
  
   
   
   Sam Harbison has written a tutorial book about Modula3:
   
     * Modula-3 Samuel P. Harbison Prentice Hall, 1992 ISBN 0-13-596396-6
       
   
   
   The table of contents is as follows:
   
    1. Introduction
    2. Declarations
    3. Statements
    4. Basic Types
    5. Structured Types
    6. Procedures
    7. Exceptions
    8. Interfaces and Modules
    9. Generics
   10. Dynamic Programming
   11. Objects
   12. Threads
   13. Low-Level Programming
   14. Programming Conventions
   15. SRC Modula-3
   16. Modula-3 Syntax
   17. Answers to Selected Exercises
       
   
   
   The errata (file://gatekeeper.dec.com/pub/DEC/Modula-3/errata) sheet
   is available.
   
  SOME USEFUL MODULA-3 INTERFACES, THE CORE LIBRARIES
  
   
   
   ``Some Useful Modula-3 Interfaces'', Jim Horning, Bill Kalsow, Paul
   McJones, Greg Nelson, SRC Research report 113
   (file://gatekeeper.dec.com/pub/DEC/SRC/research-reports/SRC-113.ps.Z)
   
  SAFE PROGRAMMING WITH MODULA-3 (DR. DOBBS JOURNAL)
  
   
   
   ``Safe Programming with Modula-3'', Sam Harbison, Dr. Dobb's Journal,
   Vol. 17, No. 10, October 1992, pp 88+.
   
  MODULA-3 (BYTE MAGAZINE)
  
   
   
   ``Modula-3'', Sam Harbison, Byte, Vol. 15, No. 12, November 1990, pp
   385+.
   
  THE MODULA-3 TREATMENT OF FLOATING-POINT VALUES (ACM LOPLAS)
  
   
   
   ``The Design of Floating-Point Data Types'', David Goldberg, ACM
   Letters on Programming Languages and Systems (LOPLAS), June 1992, Vol
   1, no.2, pp 138-151
   
  INTRODUCING MODULA-3 (LINUX JOURNAL)
  
   
   
   ``Introducing Modula-3'', Geoff Wyant, Linux Journal, December 1994,
   also in electronic form (ftp://ftp.gte.com/pub/m3/linux-journal.html).
   
  SLIDES PRESENTING MODULA-3 AND TOOLS
  
   
   
     * The language (in french)
       (http://www.vlsi.polymtl.ca/m3/document/m3-present/present-m3-fren
       ch-1.0.tar.gz)
     * A brief overview of the libraries and tools
       (http://www.vlsi.polymtl.ca/m3/document/m3-present/present-src-m3-
       1.0.tar.gz)
       
  DESCRIPTION OF THE MODULA-3 TYPE SYSTEM (POPL CONFERENCE)
  
   
   
   ``The Modula-3 Type System'', Luca Cardelli, Jim Donahue, Mick Jordan,
   Bill Kalsow, Greg Nelson, Conference Record of the Sixteenth Annual
   ACM Symposium on Principles of Programming Languages (POPL), Austin
   Texas, January 11-13 1989, pp 202-212.
   
  NETWORK OBJECTS
  
   
   
   ``Network Objects'', Andrew Birrell, Greg Nelson, Susan Owicki, and
   Edward Wobber, February 28, 1994, SRC Research report 115
   (file://gatekeeper.dec.com/pub/DEC/SRC/research-reports/SRC-115.ps.Z)
   
  OBLIQ: A LIGHTWEIGHT EMBEDDABLE LANGUAGE FOR NETWORK OBJECTS
  
   
   
   ``Obliq: A lightweight language for network objects'', Luca Cardelli,
   User's Manual, Systems Research Center, Digital Equipment Corp., 1994,
   by FTP (file://gatekeeper.dec.com/pub/DEC/Modula-3/contrib/Obliq.ps)
   
  PICKLES: SERIALIZATION OF TYPED VALUES (READ WRITE OBJECTS FROM DISK)
  
   
   
   ``Pickles: a system for automatic serialization of typed values'',
   Andrew Birrell, Greg Nelson, Susan Owicki, Edward Wobber, Systems
   Research Center, Digital Equipment Corp., in preparation.
   
  ALGORITHMS IN MODULA-3 (SEDGEWICK)
  
   
   
   Sedgewick's classic text on computer algorithms is presented in
   Modula-3 in:
   
     * Algorithms in Modula-3 Robert Sedgewick Addison-Wesley, 1993 ISBN
       0-201-53351-0
       
  SOME MODULA-3 REFERENCE MANUALS IN POSTSCRIPT
     * Modula-3 language definition
       (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc/Modula3.ps.gz)
     * SRC Modula-3 3.3 reference manual
       (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc/SRCm3-3.3.ps.gz
       )
     * Some Useful Modula-3 Interfaces
       (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc/Libm3.ps.gz)
     * Obliq A language with distributed scope
       (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc/ObliqPaper.ps.g
       z)
     * The FormsVBT reference manual
       (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc/FormsVBT.ps.gz)
     * The FormsVBT reference manual
       (http://www.vlsi.polymtl.ca/m3/document/src-m3-doc/Netobj.ps.gz)
       
  FROM THE LANGUAGE DESIGNERS: SYSTEM PROGRAMMING WITH MODULA-3
  
   
   
     * System Programming with Modula-3 Edited by Greg Nelson Prentice
       Hall Series in Innovative Technology ISBN 0-13-590464-1 L.C.
       QA76.66.S87 1991
       
   
   
   also known as SPwM3. Here is the table of contents:
   
    1. Introduction
    2. Language Definition
    3. Standard Interfaces
    4. An Introduction to Programming with Threads
    5. Thread Synchronization: A Formal Specification
    6. I/O Streams: Abstract Types, Real Programs
    7. Trestle Window System Tutorial
    8. How the Language Got its Spots
       
   
   
   Chapters 2 and 3 have been reprinted in Sigplan Notices, Volume 27,
   Number 8, August 1992, pp 15-42.
   
  THE TRESTLE WINDOW SYSTEM TOOLKIT (ON X WINDOWS OR WIN32)
  
   
   
   ``Trestle Reference Manual'', Mark S. Manasse and Greg Nelson, SRC
   Research Report 68, December 1991.
   
  DISTRIBUTED GARBAGE COLLECTION FOR NETWORK OBJECTS
  
   
   
   ``Distributed garbage collection for Network Objects'', Andrew
   Birrell, David Evers, Greg Nelson, Susan Owicki, and Edward Wobber,
   December 1993, SRC Research report 116
   (file://gatekeeper.dec.com/pub/DEC/SRC/research-reports/SRC-116.ps.Z)
   
  THE TRESTLE TUTORIAL
  
   
   
   ``Trestle Tutorial'', Mark S. Manasse and Greg Nelson, SRC Research
   Report 69, May 1, 1992.
   
  USENET NEWS GROUP
  
   
   
   There is a Usenet newsgroup, comp.lang.modula3. If you do not have
   access to Usenet, there is a relay mailing list; send a message to
   m3-request@src.dec.com to be added to it.
   
   Archives of that group are maintained and are available by FTP
   (file://gatekeeper.dec.com/pub/DEC/Modula-3/comp.lang.modula3)
   
  VBTKIT: A TOOLKIT FOR TRESTLE
  
   
   
   ``VBTkit Reference Manual: A toolkit for Trestle'', edited by Marc H.
   Brown and James R. Meehan. (to be a SRC Research Report). A draft
   version is available in VBTKit
   (file://gatekeeper.dec.com/pub/DEC/Modula-3/contrib/vbtkit.25Mar93.ps.
   Z)
   
  ZEUS: A SYSTEM FOR ALGORITHM ANIMATION
  
   
   
   ``Zeus: A System for Algorithm Animation and Multi-View Editing'',
   Marc H. Brown, February 28, 1992, SRC research report 75
   (file://gatekeeper.dec.com/pub/DEC/SRC/research-reports/SRC-075.ps.Z)
   
  COLOR AND SOUND IN ZEUS ALGORITHM ANIMATION
  
   
   
   ``Color and Sound in Algorithm Animation'', Marc H. Brown and John
   Hershberger, August 30, 1991, SRC research report 76a
   (file://gatekeeper.dec.com/pub/DEC/SRC/research-reports/SRC-076a.ps.Z)
   
  THE 1992 ZEUS ALGORITHM ANIMATION FESTIVAL
  
   
   
   ``The 1992 SRC Algorithm Animation Festival'', Marc H. Brown, March
   27, 1993, SRC research report 98
   (file://gatekeeper.dec.com/pub/DEC/SRC/research-reports/SRC-098.ps.Z)
   
Frequently asked questions and answers

   
   
  HOW TO COPY HEAP OBJECTS?
  
   
   
   Deep copies are easily performed using Pickles. An object graph is
   Pickled to a text writer into a TEXT. Then, a copy is created by
   unpickling a new object graph from a text reader created from the
   TEXT.
   
   Shallow copies are less often needed but may be performed with the
   following procedure:
   

PROCEDURE Duplicate (r: REFANY): REFANY =
  VAR
    tc     := TYPECODE (r);
    n_dims : INTEGER;
    res    : REFANY;
    shape  : RTHeapRep.ArrayShape;
  BEGIN
    IF (r = NIL) THEN RETURN NIL END;

    (* allocate a new object of the same type (and shape) as the old one *)
    RTHeapRep.UnsafeGetShape (r, n_dims, shape);
    IF (n_dims

  COMPARISONS BETWEEN MODULA-3 AND OTHER LANGUAGES?
  
   
   
   From: laszlo@post.ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI)
   
   A Comparison of Modula-3 and Oberon-2 by myself in Structured
   Programming 1993, 14:15-22
   
   From: nayeri@gte.com
   
   Robert Henderson, Benjamin Zorn, A Comparison of Object-Oriented
   Programming in Four Modern Languages, Department of Computer Science,
   University of Colorado, Boulder, Colorado, Technical Report
   CU-CS-641-93
   (ftp://ftp.cs.colorado.edu/pub/cs/techreports/zorn/CU-CS-641-93.ps.Z).
   
   
   The paper evaluates Oberon, Modula-3, Sather, and Self in the context
   of object-oriented programming. While each of these programming
   languages provide support for classes with inheritance, dynamic
   dispatch, code reuse, and information hiding, they do so in very
   different ways and with varying levels of efficiency and simplicity. A
   single application was coded in each language and the experience
   gained forms the foundation on which the subjective critique is based.
   
   
  THE PROGRAM RECEIVES A SEGV SIGNAL UNDER THE DEBUGGER
  
   
   
   The garbage collector on some platforms uses the SEGV (segmentation
   violation) signal to detect modified portions of the dynamically
   allocated space. It is possible to disable this feature or to inform
   the debugger to let these signals propagate. See the debugging tips
   (http://www.research.digital.com/SRC/modula-3/html/debugging.html)
   
  FLUSHING WRITERS TO SEE THE OUTPUT IMMEDIATELY
  
   
   
   Modula-3 Writers are buffered. Thus, you need to issue a Wr.Flush when
   the output should appear immediately, for instance to prompt the user
   for some input. Since this can become annoying, libraries in other
   languages sometimes offer the option of unbuffered writes. In
   Modula-3, an equivalent behavior is obtained with AutoFlushWr which
   gets a background thread to flush a writer at a specified interval.
   
  LINKING WITH C++ CODE
  
   
   
   Apparently there is no problem to call C++ functions declared as
   extern C.
   
   From: gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems
   Labs BOS)
   
   You must use your C++ compiler as the linker, rather than /bin/cc or
   /bin/ld.
   
   You need to call the function '_main'. The easiest way to do this is
   to have the following set of interfaces and implementations:
   

        INTERFACE CXXMain;
          <*EXTERN "_main"*> CxxMain;
        END CXXMain;

        MODULE CXXMain;
        BEGIN
          CxxMain();
        END;

   
   
   and then import CXXMain into your M3 main module. This will ensure
   that the C++ function _main gets called.
   
  WHAT IS M3-LITE, MS-WINDOWS SUPPORT
  
   
   
   M3-lite is a research project at DEC SRC to see how fast Modula-3
   programs could be compiled and linked. It uses an integrated m3build,
   m3 compiler and code generator (based on Burs) and is targeted at
   Win32 (Windows NT or Windows Chicago). Research projects, by
   definition, do not have release dates. Part of this work, when ready,
   may also serve on other platforms, especially LINUX and FreeBSD since
   they are intel based.
   
  MEETING WITH OTHER MODULA-3 USERS
  
   
   
   Modula-3 users meetings are held informally from time to time. A
   report from the last meeting is available by FTP
   (ftp://ftp.gte.com/pub/m3/m3ug/m3ug.html)
   
  MISSING RTHOOKS OR SIMILAR MESSAGES
  
   
   
   The standard library, libm3, is not included by default. You need in
   your m3makefiles to import(``libm3'') or to import a library which
   imports libm3. Otherwise, messages about run time procedures such as
   RTHooks not being available are produced. See the information on
   m3build
   (http://www.research.digital.com/SRC/modula-3/html/m3build/m3build.htm
   l)
   
  WHAT IS THE PURPOSE OF BRANDED AND REVEAL
  
   
   
   Allan Heydon writes:
   
   These two keywords are necessary because of two quite different
   features of the language. REVEAL is necessary because Modula-3 has
   opaque types and partial revelations. BRANDED is necessary because the
   Modula-3 type system uses structural equivalence instead of name
   equivalence.
   
   In Modula-3, the concrete structure of a type can be hidden from
   clients in an interface. A common idiom is:
   

  INTERFACE I;

  TYPE
    T <: TPublic;
    TPublic = OBJECT
      (* fields *)
    METHODS
      (* methods *)
    END;

  END I.

   
   
   The line "T <: TPublic" introduces the type "I.T" as an opaque subtype
   of the type "I.TPublic". It does not reveal any of the other details
   of the concrete structure of "I.T" to clients. Hence, "I.T" is said to
   be an opaque type. Put another way, the structure of "I.T" is only
   partially revealed to clients.
   
   In addition, it is possible to reveal more of "I.T"'s structure in
   other interfaces, like this:
   

  INTERFACE IRep;

  IMPORT I;

  TYPE
    TPrivate = I.TPublic OBJECT
      (* more fields *)
    METHODS
      (* more methods *)
    END;

  REVEAL
    I.T <: TPrivate;

  END IRep.

   
   
   This interface declares a type "IRep.TPrivate" that is a subtype of
   "I.TPublic". It also asserts that "I.T" is also a subtype of
   "IRep.TPrivate". A client that imports only the interface "I" has
   access only to the fields and methods in "I.TPublic" when accessing an
   object of type "I.T", but a client that imports both "I" and "IRep"
   also has access to the fields and methods in "IRep.TPrivate" when
   accessing an object of type "I.T".
   
   The "REVEAL" statement in this module simply asserts a subtype
   relation. Unlike type declarations, revelations introduce no new
   names. Hence, we could not have used the "TYPE" keyword in this case
   because the type "I.T" has already been declared once (albeit
   opaquely) in interface "I".
   
   Every opaque type must have a complete revelation. A complete
   revelation has the form:
   

  REVEAL
    T = TConcrete;

   
   
   The revelation specifies that "TConcrete" is the concrete type for the
   opaque type "T".
   
   The Modula-3 type system uses structural equivalence instead of name
   equivalence. This means that two types are equal iff they have the
   same structure. One consequence of this rule is that two types you
   might intend to be distinct may actually be equal. This can have
   unintended effects on the run-time behavior of your program. For
   example, if both types that you expect to be distinct are actually
   structurally equivalent and the two types guard two arms of a TYPECASE
   statement, the arm for the second type will never be taken.
   
   If you want to avoid accidental equalities between two types, you can
   brand one (or both) of them with the BRANDED keyword. A branded type
   is equivalent to no other type, even if it is structurally equivalent
   to some other type. In essence, the BRANDED keyword adds a bit of
   virtual structure to the type that guarantees it will be distinct from
   every other type.
   
   The Modula-3 syntax allows you to supply a text constant as a name for
   the brand. If you don't supply an explicit brand, the compiler will
   make one up; however, the implicit brand invented by the compiler is
   not guaranteed to be chosen deterministically. Hence, explicit brands
   are useful if you are communicating types from one process to another
   and if you want to be sure that the branded type written by one
   process matches the branded type read in by the other.
   
   Any two opaque types in a program must be distinct. Otherwise, it
   would be too easy for clients to accidentally trip over type
   collisions like the TYPECASE example mentioned above. To enforce the
   restriction that all opaque types are distinct, the language requires
   that the type "TConcrete" in the complete revelation above must be a
   branded type.
   
  M3BUILD VERSUS MAKE OR WHY M3 DOES NOT WORK
  
   
   
   The Modula-3 compiler m3 does a much finer grained dependency analysis
   than possible with make. For this reason, a very flexible front end,
   m3build, reads the program description files, m3makefile, and
   generates the commands required to compile and link Modula-3 programs
   and libraries. The m3makefile content is documented in the m3build
   documentation. Calling the m3 compiler directly is difficult and thus
   not recommended.
   
  WHAT IS THE STORY WITH TRESTLE AND OPENWINDOWS?
  
   
   
   Mark Manasse says:
   
   I think that the OpenWindows release should be enough (no need to get
   the MIT X release), although there are a few things in Trestle that
   trigger devastating bugs in OpenWindows. But the only library we
   depend on is Xlib, R4 or later.
   
   The main thing I know that crashes OW 2.0 is the code where we call
   GrabKey specifying AnyKey. You can either loop over all of the keys,
   or you can just comment out the call; programs won't run exactly the
   same, but you probably won't notice the difference.
   
  WHY IS HELLO WORLD SO LARGE?
  
   
   
   Modula-3 programs are larger than C programs for the following
   reasons:
   
    1. The fixed runtime is substantially larger. It contains a garbage
       collector, a thread runtime, and exception support. Note that
       Hello World is virtually all runtime. For larger programs the
       runtime is not an issue.
    2. The generated code includes runtime checks for out-of-bound array
       references and NIL pointer. Many of these checks could be removed
       by a more sophisticated compiler.
       
   
   
  WHY UPPERCASE KEYWORDS
  
   
   
   Some people prefer uppercase keywords others hate them. Another
   possibility is to accept both forms for keywords. This topic has been
   discussed at length and there is no solution that will completely
   satisfy everyone's tastes. Fortunately this is a very minor issue and
   you can easily have lowercase keywords automatically converted for you
   using an emacs macro package like m3su
   (file://pion.lcs.mit.edu/pub/m3su).
   
  EXCEPTIONS RAISED BY X OR NETWORK OBJECTS APPLICATIONS
  
   
   
   Graphical applications (based on Trestle/X Windows) raise the
   TrestleComm.Failure exception when the DISPLAY environment variable is
   incorrect or the X server is refusing the connection. They raise
   MachineIDPosix.Failure if the network configuration files are
   incorrectly set up, especially on LINUX; /etc/hosts must contain at
   least a loopback address (127.0.0.1) and the /etc/rc scripts an
   appropriate ifconfig command (/etc/ifconfig lo 127.0.0.1; /etc/route
   add 127.0.0.1). Applications with Network Objects may also raise
   exceptions or consume all the CPU time available when the network
   configuration files are incorrect.
   
  IS MODULA-3 A SUPERSET OF MODULA-2?
  
   
   
   No; valid Modula-2 programs are not valid Modula-3 programs. However,
   there is a tool to help convert Modula-2 programs to Modula-3.
   
  CALLING MODULA-3 PROCEDURES FROM A C PROGRAM
  
   
   
   Calling Modula-3 from C is tricky because M3 has a more elaborate
   run-time environment. The simplest solution is to make the main
   program M3 and then call C via EXTERNAL routines. Calling back into M3
   is then relatively straightforward.
   
   Here's an example. It calls the C code to lodge the identity of the M3
   procedure to be called back which avoids having to know the actual
   name used by the linker.
   
   First a little M3 module to be called from C (M3code), then a C module
   called by the M3 main and calling the M3 module (Ccode), and finally
   the main program (Main):
   

(* M3code.i3 *)

INTERFACE M3code;
IMPORT Ctypes;
PROCEDURE put (a: Ctypes.char_star);
END M3code.

(* M3code.m3 *)

UNSAFE MODULE M3code;
IMPORT Ctypes, IO, M3toC;

PROCEDURE put (a: Ctypes.char_star) =
  BEGIN
    IO.Put (M3toC.StoT (a) & "\n");
  END put;

BEGIN
END M3code.

(* Ccode.i3 *)

 INTERFACE Ccode;
IMPORT Ctypes;
PROCEDURE set (p: PROCEDURE (a: Ctypes.char_star));
PROCEDURE act (a: Ctypes.char_star);
END Ccode.

/* Ccode.c */

typedef void (*PROC)();
static PROC action;

void set (p)
  PROC p;
  {
    action = p; /* register the M3 procedure */
  }

void act (a)
  char *a;
  {
    action (a); /* call the M3 procedure */
  };

(* Main.m3 *)

UNSAFE MODULE Main;

IMPORT Ccode, M3code, M3toC;

BEGIN
  Ccode.set (M3code.put);
  Ccode.act (M3toC.TtoS ("Hello world"));
END Main.

(* m3makefile *)

import(libm3)

interface ("Ccode")
c_source ("Ccode")
module ("M3code")
implementation("Main")
program("mixed")

  PROBLEMS WITH THREADS AND VTALARM
  
   
   
   The threads are implemented using the virtual timer interrupt.
   Normally, the run time environment will catch the interrupt and
   determine if thread switching is appropriate. However, if a new
   process is created with fork, it will have the virtual timer activated
   and no interrupt handler to receive it, resulting in a core dump. If
   you use the standard procedure Process.Create to fork new processes,
   this will be handled automatically for you. If you insist on using
   fork, you need to disable the timer, fork and then reenable the timer.
   
   
  X LIBRARIES NOT FOUND
  
   
   
   The position of X libraries is stored in, for instance for
   pre-compiled LINUX binaries, the template file m3build/templates/LINUX
   as well as in X11R4/LINUX/.M3EXPORTS. Thus you may want to edit these
   files if your X libraries are located in an uncommon place.
   
Commercial offerings

   
   
  BOOKSTORES
  
   
   
   If you cannot find some of the Modula-3 books at your favorite
   bookstore, here are bookstores connected to the net known to carry
   them: UCI Bookstore (http://bookweb.cwis.uci.edu:8042/HomeTest.html),
   Roswell Electronic Computer Bookstore
   (gopher://owl.nstn.ns.ca/11/Other%20Gophers%20in%20Nova%20Scotia/Roswe
   ll%20Electronic%20Computer%20Bookstore) (rjames@fox.nstn.ns.ca)
   
  PRIME TIME FREEWARE OFFERS MODULA-3 SOURCES ON CD-ROM
  
   
   
   Prime Time Freeware (PTF) includes Modula-3. PTF is a set of two
   ISO-9660 CDroms filled with 3GB of freeware, issued semi-annually. PTF
   is distributed via bookstores and mail. You can reach PTF using:
   

        Email:  ptf@cfcl.com
        Fax:    [1] (408) 738 2050
        Voice:  [1] (408) 738 4832
        Mail:   Prime Time Freeware
                415-112 N. Mary Ave., Suite 50
                Sunnyvale, CA 94086
                USA

   
   
Modula-3 for teaching

   
   
   Modula-3 is very well suited for teaching: simple yet powerful, and
   safe. It avoids the complexity of legacy languages. It can be used to
   demonstrate modules and interfaces, object oriented programming,
   multi-threading (concurrency issues), graphical user interfaces
   (Trestle, VBTKit, FormsVBT) and even distributed programming (Network
   Objects, Obliq). Since less time is spent by students and teaching
   assistants chasing dangling pointers and corrupted data, more time is
   available for learning the important concepts.
   
   It is used for teaching in a number of universities. This list is far
   from complete, send corrections and additions to
   dagenais@vlsi.polymtl.ca.
   
  LEHRSTUHL FUER INFORMATIK III
  
   
   
   From: pk@i3.informatik.rwth-aachen.de (Peter Klein) Lehrstuhl fuer
   Informatik III, RWTH Aachen, Germany: Software Development Projects,
   now held for the second time using Modula-3. Aim of these projects is
   to introduce different aspects of software development to graduate
   students. This includes project planning, supervision, design, and
   cooperative implementation of small but usable software systems.
   Central ideas of software design and object-oriented implementation
   are presented and discussed with the concepts of Modula-3, which is
   also the implementation language.
   
   Future plans: Maybe Modula-3 will replace Modula-2 in some
   undergraduate programming lectures in the future.
   
  UNIVERSITY OF CAMBRIDGE
  
   
   
   From: Peter.Robinson@cl.cam.ac.uk
   
   University of Cambridge, England.
   
   The Computer Science course at the University of Cambridge teaches ML
   as an introductory language at the beginning of the freshman year, and
   then uses Modula-3 to develop imperative programming at the end of
   that year. Further lectures on advanced features of the language are
   given early in the second year, together with separate lectures on
   other, specialised languages.
   
   The course has been given to about 70 students each year since 1990,
   and has developed with the language. It ties in with other lectures on
   data structures and algorithms, software engineering and concurrency.
   Modula-3 is used for student group projects in the second year and for
   about a quarter of individual projects in the final year (where,
   interestingly, students using Modula-3 tend to earn higher grades than
   those using C/C++).
   
   Modula-3 is also used in the Computer Laboratory at Cambridge for a
   number of research projects on distributed computing, human-computer
   interaction and electronic CAD.
   
  ROYAL INSTITUTE OF TECHNOLOGY, SWEDEN
  
   
   
   From: viggo@nada.kth.se
   
   Royal Institute of Technology. Several courses at the computer science
   department use Modula-3. The courses contain programming projects, and
   many students choose to use Trestle. (Dr. Viggo Kann,
   viggo@nada.kth.se)
   
  UNIVERSITY KLAGENFURT
  
   
   
   From: laszlo@ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI)
   
   Modula-3 is used at the following courses: Undergraduate:
   Softwaretechnology-1 (actually an introduction into programming) (on
   PCs) Softwaretechnology-2 (data structures and algorithms) (on PCs)
   Graduate: Computer Networks (on a network of DECs and SUNs) Parallel
   Programming (on an DEC-Alpha Farm)
   
   Modula-3 has been in use since ca. one year, with very good
   experiences.
   
  ECOLE POLYTECHNIQUE DE MONTREAL
  
   
   
   From: Michel Dagenais (dagenais@vlsi.polymtl.ca)
   
   Modula-3 is used as the main example in an undergraduate course on
   object oriented programming and in a graduate course on ``Algorithmic
   Aspects of CAD'', which includes a large portion on OO programming and
   databases.
   
  UNIVERSITY OF MANCHESTER
  
   
   
   From: Dave Snelling (snelling@cs.man.ac.uk)
   
   Department of Computer Science, University of Manchester, Manchester
   U.K. We have a small, interdisciplinary collection of people using
   Modula-3 for a variety of activities. Our major production code is a
   hardware architecture simulator (about 120 modules). Smaller projects
   include a Lattice Gass model and a Shallow Water model.
   
  STATE UNIVERSITY OF NEW YORK AT STONY BROOK
  
   
   
   From: pbh@cs.sunysb.edu (Peter Henderson)
   
   Modula-3 is currently used for teaching Computer Science I and
   Computer Science II at SUNY at Stony Brook. We are currently
   developing a sequence of laboratory assignments and case studies
   introducing OO techniques and software reuse in these two courses.
   
   The first course for computer science majors at Stony Brook is
   "Foundations of Computer Science" which emphasizes general problem
   solving, mathematics and the relationships between mathematics and
   computer science. There is an extensive laboratory component using
   theorem provers, Prolog and Standard ML.
   
  UNIVERSITY OF MASSACHUSETTS AT AMHERST
  
   
   
   At: University of Massachusetts at Amherst
   
   Modula-3 is used as an input language for the Computer Science course
   on Compilation techniques. The professor is Eliot Moss.
   
  UNIVERSITY OF WATERLOO, ONTARIO
  
   
   
   From: Carsten Whimster (bcrwhims@undergrad.math.uwaterloo.ca)
   
   University of Waterloo:
   
   CS246 - Third introductory course in computer science. Software
   engineering and software systems. Medium size projects. Uses Modula-3
   to demonstrate proper OO programming, as well as general programming
   practices.
   
   CS241 - Fourth and final intro course to CS. Focuses mainly on
   compilers and languages. Various assignments has students create most
   of the different parts of a compiler. Also introduces Scheme (lisp).
   
  QUEEN MARY AND WESTFIELD COLLEGE, LONDON
  
   
   
   From: Matthew.Huntbach@dcs.qmw.ac.uk
   
   We have used it for three years here at Queen Mary and Westfield
   College, London. The main problem I find with the language is the slow
   compilation speed on our teaching machines (Macs running A/UX),
   otherwise it's a nice language to teach with.
   
Modula-3 In Industry

   
   
   A number of programming teams in industry selected Modula-3 for their
   project. It encourages good programming practices and comes with
   excellent libraries for distributed programming and graphical user
   interfaces.
   
  FARSHAD NAYERI, GTE LABS
  
   
   
   Distributed Object Computing, GTE Labs, Waltham, Massachusetts USA
   Modula-3 (FormsVBT, Sx, Netobj libraries) is used to prototype
   distributed object management. (Farshad Nayeri nayeri@gte.com). See
   the report (file://ftp.gte.com/pub/dom/reports/NAYE93c.ps)
   
  GEOFFREY WYANT, SUN MICROSYSTEMS LABS BOS
  
   
   
   Sun Microsystems Laboratories, Inc. (East) is using Modula-3 (Network
   Objects, FormsVBT) as the basis for its research in large scale
   distributed object systems. (gwyant@cloyd.East.Sun.COM)
   
Work In Progress

   
   
   The purpose of this section is to let everyone know what is being
   worked on. This is not a commitment to a quick release or even to
   completion. However it may enable parties interested in the same
   topics to pool their efforts, avoid duplication or better integrate
   their packages.
   
   To find more information about the names mentioned, see the Who's Who
   section.
   
     * Reports And Books (http://www.vlsi.polymtl.ca/m3/plan/books.html)
     * Abstract Syntax Tree Tools (M3 Parser)
       (http://www.vlsi.polymtl.ca/m3/plan/lex.html)
     * Parallel Programming
       (http://www.vlsi.polymtl.ca/m3/plan/parallel.html)
     * Persistence through reachability
       (http://www.vlsi.polymtl.ca/m3/plan/persist.html)
     * Integrated Development Environment
       (http://www.vlsi.polymtl.ca/m3/plan/ide.html)
     * Computer Assisted Learning Tools (Algorithm Animation)
       (http://www.vlsi.polymtl.ca/m3/plan/animations.html)
     * Postscript VBT
       (http://www.vlsi.polymtl.ca/m3/plan/postscriptvbt.html)
     * Presentations, Tutorials And Teaching Material
       (http://www.vlsi.polymtl.ca/m3/plan/present.html)
     * Rotated Text (http://www.vlsi.polymtl.ca/m3/plan/rotatedtext.html)
       
   Wanted list (http://www.vlsi.polymtl.ca/m3/wanted/index.html) Modula-3
   who's who (http://www.vlsi.polymtl.ca/m3/who/index.html)
--

Prof. Michel Dagenais        http://www.vlsi.polymtl.ca/dagenais/home/home.html
Dept of EE and Computer Eng.        dagenais@vlsi.polymtl.ca
Ecole Polytechnique de Montreal     tel: (514) 340-4029

