Pascal is a popular language for teaching data structures and programming methodology. Unfortunately, standard Pascal is missing some of the facilities that are key to modern programming techniques. Modula-2, the latest descendant of Pascal, overcomes these deficiencies.
But, Modula-2 goes beyond the classroom too. Its powerful facilities make it an excellent language in production environments as well. Waterloo Modula-2 presents a novel approach to compilers, merging the teaching and production requirements into one compiler and run-time library.
"Modula-2 emerged from careful design deliberations as a language that includes all aspects of Pascal and extends them with the important module concept...", Professor Niklaus Wirth, Designer of Pascal and Modula-2, Programming in Modula-2, Third Corrected Edition (Springer-Verlag, 1985).
Waterloo Modula-2 automatically performs an optimization pass over the generated code. The resulting programs execute with all the speed and efficiency demanded in production environments.
Object files are in standard IBM format for use with standard CMS commands such as LOAD and INCLUDE. Also, these files may be placed into a CMS TXTLIB for convenience.
Waterloo Modula-2 was developed by the Computer Systems Group at the University of Waterloo. Their compilers are developed for computer science courses at the university and are used at many academic institutions worldwide. Waterloo Modula-2 has been designed to contain all the function necessary to be both a development and a production compiler.
One of the most notable features of Waterloo compilers is the "load-and-go" capability. Waterloo Modula-2 is no exception. In this mode, programs may be compiled, linked, and executed in a single step. Compiling, for the beginner, is greatly simplified.
In "load-and-go" mode, Waterloo Modula-2 searches through CMS object-code libraries (TXTLIBs) to locate library modules. The instructor can provide Modula-2 routine packages to students, in a straightforward manner.
To further simplify use and improve performance, the compiler may be invoked directly from within XEDIT. The file to be compiled is obtained directly from XEDIT's memory, thus eliminating overhead due to disk I/O.
Run-time error detection option generates special code to check for common programming errors such as uninitialized variables, array subscripting errors, subtrange type errors, NIL pointers and so on.
When a run-time error is detected, developers can instruct the compiler to indicate the location of the error in terms of the program source, rather than a machine address. Beginners find this particularly helpful.
Because of its background in Pascal, Modula-2 contains many popular programming language features, including structured programming statements, abstract data types, and portability. With the added feature of modularity, Modula-2 becomes an excellent language for both teaching and systems development. It embodies many of the current thoughts in the field of software engineering. The task of writing a correct program is made easier with Modula-2 because many potential errors are detected when the program is compiled, rather than when the program is executed. Waterloo Modula-2 is a full implementation of the language as defined by Wirth in the book Programming in Modula-2, Third Corrected Edition (Springer Verlag, 1985).
The key idea behind modules is the recognition that programs, especially large ones, are typically made up of many small isolated components, or modules. Each module may refer to other modules, but need not be aware of the details of how the other modules work. The definition of a module is completely independent of the implementation of a module. While other programming languages may support separate components, Modula-2 allows modules to control all aspects of their interfaces.