Fact-checked by Grok 2 weeks ago

Modula-2

Modula-2 is a structured, developed by computer scientist at between 1977 and 1980, primarily designed for systems implementation and as an evolution of his earlier language Pascal to better support large-scale and . The language introduces the as its central organizational unit, allowing explicit definitions, separate compilation of program components, and improved encapsulation to facilitate the construction of reliable, maintainable systems. Unlike Pascal, which lacked robust mechanisms for separate compilation and low-level hardware access suitable for operating systems, Modula-2 incorporates facilities for direct memory manipulation, variant records, and coroutines to enable concurrent programming without relying on threads or processes. Modula-2 was created in the context of the Lilith project, a personal workstation initiative at ETH Zurich, where the entire operating system and applications were implemented in the language to demonstrate its efficacy for real-time and embedded applications. The first compiler was completed in 1979 for the DEC PDP-11 minicomputer, and the definitive specification appeared in Wirth's March 1980 report, emphasizing simplicity, clarity, and efficiency as core design principles. Although Modula-2 influenced subsequent languages like and aspects of later Pascal extensions, its adoption waned in the 1990s due to the dominance of and C++ in , but it remains available through various implementations and is valued for its and safety features in educational and niche contexts. In 1996, the (ISO) published a standard for the language (ISO/IEC 10514-1), defining a for compatible implementations.

History and Development

Origins and Design

Modula-2 was developed by Niklaus Wirth at the Swiss Federal Institute of Technology (ETH) in Zurich, beginning in 1977, as a successor to Pascal to address its limitations in supporting larger-scale systems programming. Pascal, while effective for teaching structured programming, lacked sufficient mechanisms for modular decomposition and low-level hardware access needed in complex system implementations. The primary motivations for Modula-2's design centered on introducing modularity to enable separate compilation of program components, providing abstraction layers for hardware interfaces, and eliminating global variables to minimize interference between modules. This approach drew from principles of information hiding and abstract data types, aiming to facilitate collaborative development of reliable software systems by enforcing strict interfaces and controlled visibility. Wirth's design was influenced by the Mesa programming language, encountered during his 1976-1977 sabbatical at Xerox PARC, which emphasized modular structures, and by his earlier Modula language from 1977, which explored concurrent programming for dedicated systems. These elements shaped Modula-2's core concept of modules as replacements for Pascal's rudimentary units, promoting encapsulation and reusability. The language's initial specification was published in March 1980 as the "Report on MODULA-2" by Wirth, an ETH Technical Report that outlined its syntax, semantics, and foundational principles for systems implementation.

Evolution and Standardization

The Preliminary Modula-2 Report (PIM), authored by Niklaus Wirth, was released in March 1980 as ETH Zurich Technical Report No. 36, providing the initial formal definition of the language and describing its implementation on the PDP-11 computer. This report outlined the core syntax, module system, and systems programming capabilities, serving as the foundation for early implementations. The full language definition followed with the publication of Wirth's textbook Programming in Modula-2 in 1982, which expanded on the preliminary concepts with detailed semantics, examples, and revisions based on practical use at ETH Zurich. Standardization efforts for Modula-2 began in the mid-1980s through international working groups, culminating in the ISO/IEC 10514-1:1996 standard for the core language, which rigorously defined the syntax, semantics, and standard library while specifying requirements for program representation, bindings, and . This standard addressed ambiguities in earlier definitions, such as those in Wirth's 1982 textbook, to promote portability across implementations. Key evolutions in Modula-2 maintained a stable language focused on and , with some implementations adding low-level features like direct hardware access via the LOWLEVEL module for , though these were not part of the ISO . Minor revisions extended the language through ISO/IEC 10514-2:1998, introducing generic modules to support parameterized abstractions without altering the base syntax. The remained largely unchanged post-1982, prioritizing over major redesigns. In , a for a limited revision of the ISO standard was published to address some deficiencies, though no update has been adopted as of 2025. Adoption faced challenges due to the absence of an official , leading to vendor-specific variations in compilers developed independently from Wirth's reports, such as differences in one-pass compilation and forward references. These inconsistencies, exacerbated by ambiguities in early , resulted in dialect fragmentation despite efforts by ISO/IEC JTC1/SC22/WG13 starting in 1987.

Core Language Features

Modularity and Modules

Modula-2's design emphasizes as its core principle, enabling the construction of large, maintainable software systems by partitioning programs into independent units that encapsulate related functionality. This approach was introduced to address the limitations of earlier languages like Pascal in handling complex, concurrent, and systems-level programming, where tight coupling and global visibility often led to maintenance issues. Central to this modularity are definition modules and implementation modules, which together support separate compilation and . A module specifies the of a , declaring constants, types, variables, and procedure headings without providing implementations, thereby serving as a that multiple implementation modules can fulfill. In contrast, an module provides the actual body of the procedures and the storage for variables declared in the corresponding module, including private details that remain inaccessible to other parts of the program. This separation allows developers to compile and modify independently, facilitating team-based development and reuse in environments. Visibility and encapsulation are controlled through and mechanisms, which selectively expose identifiers to prevent unintended interactions. Exports in a 's definition specify which declarations are available to importers, with options for qualified exports that require prefixing with the module name to avoid naming conflicts. Imports, meanwhile, allow a to access external declarations either in a qualified form (requiring module prefixes) or unqualified via a FROM clause, ensuring that only explicitly named items enter the current scope. These mechanisms enforce strict boundaries around contents, promoting by hiding details such as opaque types, where users can declare variables of a type but cannot manipulate them directly without module-provided procedures. In terms of program structure, a Modula-2 program consists of a main program module that imports other modules as needed, with all execution starting from the main module's statement sequence. There is no global scope; instead, all identifiers must be qualified by their module or explicitly imported, which reinforces modularity by eliminating implicit shared state across the entire program. Local modules can also be nested within others to further refine visibility, exporting subsets of symbols to their enclosing scope. These features provide significant benefits for , particularly in reducing inter-module and enabling the of or operating system dependencies. By confining machine-specific code—such as low-level I/O or handling—to dedicated with relaxed type checking, Modula-2 allows the bulk of a program to remain portable and verifiable, while the / controls minimize ripple effects from changes in one . This design supports the development of reliable, concurrent systems like operating systems or , where directly contributes to fault and .

Data Types and Declarations

Modula-2 provides a strongly typed where data types define the values variables can hold and the operations applicable to them. The language includes a set of primitive types that form the foundation for all other types, ensuring through strict compatibility rules. These primitive types are predeclared and include , which represents signed integers within the range from MIN(INTEGER) to MAX(INTEGER); , denoting unsigned integers from 0 to MAX(CARDINAL); REAL, for floating-point numbers; , corresponding to the character set of the host ; and , with values TRUE and FALSE. Additionally, extensions like LONGREAL and LONGINT may be available depending on the implementation. Modula-2 lacks built-in types, requiring programmers to define strings as arrays of CHAR. Structured types in Modula-2 build upon primitives to support complex data organization. Arrays are declared with a fixed number of components of the same type, indexed by ordinal types such as subranges, enumerations, , or ; for example:
TYPE Vector = ARRAY [0..9] OF REAL;
Records aggregate components of potentially different types into a single unit, supporting variant records for discriminated unions via a tag field; an example is:
TYPE Shape = RECORD
  x, y: REAL;
  CASE tag: Color OF
    red: (a: [INTEGER](/page/Integer); b: [CARDINAL](/page/Cardinal)) |
    blue: (c: REAL)
  END;
END;
Sets represent collections of unique values from a base type, typically subranges or enumerations, such as BITSET = SET OF [0..31] for . Pointers reference variables of any type, including NIL as a null value, enabling like linked lists. Declarations in Modula-2 specify the properties of constants, types, and variables, associating identifiers with their types. Constants are defined using the syntax CONST ident = constant-expression, where the expression must be evaluable at , such as CONST N = 100;. Type declarations use TYPE ident = type-denoter to name new types, promoting reuse and abstraction. Variables are declared as VAR ident-list : type ;, with initialization performed via separate statements; for instance,
VAR i, j: INTEGER;
i := 0; j := 0;
Modula-2 does not support initialization directly in variable declarations. Type compatibility enforces Modula-2's strict typing discipline, prohibiting implicit conversions to prevent errors. Two types T1 and T0 are compatible only if they are identical, one is a subrange of the other, or both are subranges of the same base type; otherwise, explicit casts via implementation-specific functions are required. This rule extends to parameters and assignments, ensuring no automatic coercion between, say, INTEGER and REAL. Opaque types, used for modular abstraction, hide the full type definition in definition modules, restricting exports to pointers or subranges of standard types to maintain information hiding without exposing implementation details. Dynamic memory allocation in Modula-2 is handled through pointers and a separate storage management module, avoiding built-in dynamic arrays. The NEW(p), typically from a system module like , allocates for the type pointed to by p and initializes the pointer; for example, NEW(tree, data) creates a new node. Deallocation uses DISPOSE, emphasizing manual management to support while leveraging the for safety.

Control Structures and Procedures

Modula-2 provides a set of structured control statements for managing program flow, emphasizing clarity and avoiding unstructured jumps like , which were present in earlier languages such as Pascal. These include conditional branching with and CASE statements, as well as iteration via WHILE, REPEAT-UNTIL, and FOR loops, supplemented by and for early termination. The IF statement enables selective execution based on conditions. Its syntax is IF expression THEN StatementSequence {ELSIF expression THEN StatementSequence} [ELSE StatementSequence] END, where the expressions are evaluated sequentially until one is true, executing the corresponding statement sequence; if none are true, the optional branch is taken. For example:
IF x > 0 THEN
  WriteLn("Positive")
ELSIF x < 0 THEN
  WriteLn("Negative")
ELSE
  WriteLn("Zero")
END
This promotes readable, nested decision-making without deep indentation issues common in other languages. The CASE statement supports multi-way branching on ordinal types, such as integers or characters. It uses the form CASE expression OF case {"|" case} [ELSE StatementSequence] END, where each case is a label list followed by a statement sequence; the branch matching the expression's value is executed, or the ELSE if no match. Labels can be single values or ranges, e.g., 1 .. 5: WriteLn("Low") | 6: WriteLn("Medium"). This construct efficiently handles discrete selections, reducing the need for chained IF-ELSIF statements. Iteration in Modula-2 relies on three loop constructs. The WHILE loop, WHILE expression DO StatementSequence END, tests the condition before each iteration, ensuring the body executes zero or more times if the initial condition holds. The REPEAT-UNTIL loop, REPEAT StatementSequence UNTIL expression, executes the body at least once, checking the condition afterward for termination. The FOR loop, FOR ident := expression TO expression [BY constant] DO StatementSequence END, iterates a control variable over a closed interval, incrementing by 1 (or the specified constant, which must be positive for TO or negative for a variant like DOWNTO in some dialects); the variable is read-only during the loop. For instance:
FOR i := 1 TO 10 BY 2 DO
  WriteLn(i)
END
These loops facilitate bounded and conditional repetition without side effects on the loop variable in the FOR case. The EXIT statement, simply EXIT, prematurely terminates the innermost enclosing loop (WHILE, REPEAT, or FOR), transferring control to the statement following the loop; it cannot be used outside loops. RETURN, RETURN [expression], exits the current procedure, optionally providing a value for functions that match the declared result type; in proper procedures (void), no expression is used. These statements enable clean early exits without unstructured control flow. Procedures in Modula-2 encapsulate reusable code blocks, divided into proper procedures (no return value) and function procedures (returning a value specified after the parameter list in the heading). A declaration follows PROCEDURE identifier [(FormalParameters)] [: ResultType]; DeclarationSequence StatementSequence END identifier, where the body includes local declarations and statements. Formal parameters are listed as IdentList : Type for value parameters (passed by copy, with changes local to the procedure) or VAR IdentList : Type for reference parameters (aliased to the actual variable, allowing modifications to persist). For example:
PROCEDURE Swap(VAR a, b: INTEGER);
VAR temp: INTEGER;
BEGIN
  temp := a; a := b; b := temp
END Swap;
Value parameters promote safety by isolating side effects, while VAR parameters optimize for large structures like arrays. Scope rules in Modula-2 confine identifiers to the block of their declaration, typically the procedure body for locals, preventing unintended interactions; global access occurs via module exports, but procedures themselves maintain lexical scoping. Nested procedures are permitted, declared within an outer procedure's body and accessible only therein, with each invocation allocating separate activation records. Recursion is supported in the core language, allowing a procedure to invoke itself, though some dialects or implementations may disable it by default for stack management reasons. Error handling in core Modula-2 lacks built-in exceptions, relying instead on procedure results (e.g., functions returning error codes or Booleans) or RETURN statements to propagate status, often checked via IF or CASE. This approach integrates with modules for system-level reliability without runtime overhead from exception mechanisms.

Syntax and Language Elements

Reserved Words and Identifiers

In Modula-2, reserved words are fixed keywords that form the core vocabulary of the language, consisting exclusively of uppercase letters and serving structural roles such as defining modules, control flow, and data declarations. These words cannot be used as identifiers and include approximately 40 in the base language, with additional ones in the ISO standard extensions. The core reserved words are: AND, ARRAY, BEGIN, BY, CASE, CONST, DEFINITION, DIV, DO, ELSE, ELSIF, END, EXIT, EXPORT, FINALLY, FOR, FORWARD, FROM, IF, IMPLEMENTATION, IMPORT, IN, LOOP, MOD, MODULE, NOT, OF, OR, PACKEDSET, POINTER, PROCEDURE, QUALIFIED, RECORD, REPEAT, RETRY, RETURN, SET, THEN, TO, TYPE, UNTIL, VAR, WHILE, WITH. ISO extensions add reserved words for advanced features, such as for generics, and object-oriented keywords like , , and . Built-in identifiers, also known as predeclared or standard identifiers, are pervasive elements available throughout a program without needing explicit declaration or import. They encompass constants, types, and procedures/functions for common operations. Key constants include TRUE and FALSE for the BOOLEAN type, and NIL for pointers. Essential types are BITSET, BOOLEAN, CARDINAL, CHAR, INTEGER, REAL, and ISO additions like COMPLEX and LONGREAL. Predeclared procedures include ADR (to obtain the address of a variable), MAX and MIN (to get the maximum/minimum value of a type), SIZE (to determine the storage size of a type in bytes), and others like ABS, ORD, CHR, INC, and DEC for arithmetic and conversion tasks; ISO-specific ones include CMPLX for complex number construction and LENGTH for array lengths. Identifiers in Modula-2 are user-defined names for variables, procedures, modules, and other entities, formed as sequences of letters and digits starting with a letter (e.g., scan, GetSymbol, firstLetter). The language is case-sensitive, meaning MyVar and myvar are distinct, though a convention of mixed case for readability is common. Reserved words and built-in identifiers cannot be redefined or used as custom identifiers to avoid conflicts. While the core ISO Modula-2 standard (ISO/IEC 10514-1:1996) fixes the set of reserved words and built-in identifiers to ensure portability, some dialects and extensions introduce additional reserved words or modify predeclared elements for specific implementations, such as adding syntax extensions.

Expressions and Operators

Expressions in Modula-2 are constructs that compute values from operands using operators, with parentheses available to override default associativity and precedence. The language defines four precedence levels for operators, applied from highest to lowest, with left-to-right evaluation within the same level. Type compatibility is strictly enforced; operands must match the expected types for each operator, and no operator overloading is permitted. Arithmetic operators handle numeric computations, differing by type. For integers (INTEGER, CARDINAL, or subranges), the operators are addition (+), subtraction (-), multiplication (), integer division (DIV), and modulus (MOD). For real numbers (REAL or LONGREAL), division uses / instead of DIV, with the others shared. Unary plus and minus apply to both integer and real types. These multiplying operators (, /, DIV, MOD) hold the second-highest precedence, while adding operators (+, -) are third. For example, the expression 5 DIV 2 + 3 * 4 evaluates to 14, as multiplication and division precede addition, and operations proceed left-to-right within levels. Relational operators compare values and yield BOOLEAN results, with the lowest precedence. They include equality (=), inequality (# or <> in some notations), less than (<), greater than (>), less than or equal (<=), and greater than or equal (>=), applicable to basic types, enumerations, and subranges. The IN operator tests set membership, returning TRUE if the left operand (scalar or subrange) is an element of the right operand (SET type). Logical operators manipulate BOOLEAN values, with NOT at the highest precedence, AND (&) at the multiplying level, and OR at the adding level. NOT inverts a single boolean, while AND and OR are binary. The original specification does not mandate short-circuit evaluation for AND or OR, though some implementations provide it as an extension. Assignment uses the := symbol exclusively and is not an expression ; it appears only in statements. Modula-2 lacks increment (++) or decrement (--) operators. Expressions remain pure, free of side effects except those from calls as factors. Set operators treat SET types specially: + for , * for , / for , and - for , following the precedence of multiplying and adding operators.

Input/Output and System Interface

Modula-2 intentionally excludes built-in input/output facilities from its core language definition to ensure simplicity and machine independence. Instead, input and output operations are managed through imported modules tailored to specific operating systems or environments, such as InOut for basic interactions or OS-specific modules for file handling. This approach confines I/O functionality to separate, replaceable components, allowing programs to remain portable across different systems by swapping modules as needed. The module serves as the primary entry point for low-level system interfaces, providing access to machine-dependent operations like direct hardware port manipulation, process creation via NEWPROCESS, and context switching with TRANSFER. Procedures such as NEW and DISPOSE for dynamic memory allocation are also defined within SYSTEM, enabling low-level control while isolating it from the rest of the program. By restricting such features to this single module, Modula-2 promotes encapsulation and minimizes the risk of non-portable code infiltrating higher-level abstractions. Common practices for I/O abstraction involve defining separate modules with exported procedures for specific tasks, often building on low-level primitives. For instance, the InOut module typically exports procedures like WriteString for outputting strings to the and ReadString for input, as well as WriteLn to advance to a new line, facilitating readable interactions without embedding OS details in the main . These definition modules declare interfaces that implementation modules fulfill, ensuring that I/O code can be adapted to various targets—such as consoles or files—while maintaining a consistent procedural . This modular design for and system interfacing stems from the language's emphasis on portability and , avoiding the inclusion of diverse facilities that could bloat the core syntax and hinder adaptation to new hardware. By treating I/O as an external concern resolvable through module imports, Modula-2 enables developers to customize interfaces per system without altering the language itself, a principle that aligns with its origins in .

Variants and Extensions

Dialects

Modula-2 dialects primarily refer to variations in the language specification that arose from Niklaus Wirth's original definition and subsequent standardization efforts. The foundational dialect is the PIM (Programming in Modula-2) version, outlined in Wirth's 1982 book of the same name, which established the core , module system, and procedural constructs but contained ambiguities in areas like type compatibility and low-level operations. This PIM dialect, particularly its second edition, became the basis for numerous early compilers, such as those developed in the for systems like the PDP-11 and personal computers. Later editions of the book (third in 1985 and fourth in 1988) introduced revisions, including pervasive identifiers like and support for lists in definition modules, leading to sub-variants like PIM3 and PIM4. The ISO dialects represent the formalized standards, with the core language defined in ISO/IEC 10514-1:1996 and optional extensions in ISO/IEC 10514-2:1998. These standards resolved PIM ambiguities, such as integer and semantics for negative numbers—where earlier PIM2 and PIM3 aligned on truncating toward zero (e.g., -31 DIV 10 = -3, -31 MOD 10 = -1), differing from PIM4 and ISO which truncate toward negative (e.g., -31 DIV 10 = -4, -31 MOD 10 = 9). ISO also introduced features like the and LONGCOMPLEX data types, , and termination blocks using FINALLY, enhancing robustness for . A notable low-level difference involves BITSET: in PIM, it is a pervasive predefined type for , whereas in ISO, BITSET refers to a definition providing bit set operations, promoting better modularity. Modern open-source implementations, such as Ulm's M2C , support multiple PIM variants—including unrevised (first/second editions), revisions, and the third edition—alongside partial ISO compliance, allowing developers to target specific behaviors via flags like -r0, -r1, or -r2. Similarly, the Modula-2 accommodates PIM2, PIM3, PIM4, and full ISO through options like -fpim2 or -fiso, ensuring with legacy code while adhering to standardized semantics. These maintain the language's focus on modularity and , with variations primarily affecting portability and low-level interfacing rather than core paradigms.

Supersets

Supersets of Modula-2 extend the core language with additional features such as concurrency, object orientation, and generics, while preserving compatibility with standard Modula-2 syntax and semantics to allow reuse of existing modules. These extensions address limitations in the base language for specific domains like and embedded applications, often through vendor-specific or standardized additions. Modula-2+, developed at Digital Equipment Corporation's Systems Research Center in the mid-1980s, introduces object-like programming capabilities, including via method calls on object types and limited type extension mechanisms that support inheritance-like behavior for building extensible data structures. It also adds exceptions for error handling, concurrency primitives for preemptive threads, for automatic , and signaling for , enabling the construction of larger, more robust systems. JPI TopSpeed Modula-2, released in the late by Jensen & Partners International, incorporates extensions including a time-sliced process scheduler for multitasking and tasking support, facilitating concurrent execution in resource-constrained environments like embedded systems. These features enhance predictability and responsiveness, with ensured through optional language modes that align with PIM and ISO dialects. Prior to the ISO standardization, several implementations offered superset extensions for generics, allowing definition modules to be parameterized for reusable, type-safe code without full recompilation, as seen in early academic and commercial compilers like those from the . Extended input/output facilities were also common in supersets, providing enhanced handling and interfaces while maintaining encapsulation. The ISO/IEC 10514-3:1998 standard formalizes object-oriented extensions, including definitions with and polymorphism, while ISO/IEC 10514-2:1998 adds a generics layer for parametric definitions and instantiations. Post-2000 supersets, such as Objective Modula-2 developed since 2006, build on revised Modula-2 (R10) with comprehensive object-oriented features like , , and dynamic message dispatch, emphasizing suitable for safety-critical applications in and systems. These extensions have seen limited but targeted adoption in domains requiring high reliability, where Modula-2's strong typing and provide a foundation for certified software.

Derivatives

Oberon, introduced by in 1987 at , serves as a direct successor to Modula-2, refining its modular design principles while streamlining syntax and incorporating basic object-oriented capabilities through extensible modules and type extension mechanisms. This evolution addressed perceived complexities in Modula-2's separate compilation model by unifying definitions and implementations within modules, promoting a more concise approach to for workstations like the Ceres system. Oberon's influence stems from Modula-2's emphasis on encapsulation and separate compilation, but it diverges by eliminating low-level features like absolute addressing in favor of safer, higher-level abstractions. Modula-3, conceived in 1988 by researchers at Digital Equipment Corporation's Systems Research Center (SRC) and the Olivetti Research Laboratory, builds upon Modula-2 as a safer alternative for concurrent and distributed systems programming. It introduces exceptions for error handling, lightweight threads for concurrency, and automatic garbage collection to mitigate memory management issues prevalent in Modula-2, while retaining the core module system for modularity. Designed to support large-scale software development, Modula-3 emphasizes interface separation and generic programming through parameterized modules, making it suitable for building robust operating systems and applications at organizations like DEC. Lagoona, developed in the early 1990s by Michael Franz—a student of at —represents an object-oriented evolution within the Wirth language family, rooted in and thus indirectly in Modula-2's modular foundations. Unlike traditional class-based languages, Lagoona employs a strongly typed system with stand-alone messages bound to modules, enabling and composition without explicit inheritance hierarchies, which enhances flexibility in database and component-oriented applications. This design diverges significantly from Modula-2 by prioritizing message-passing semantics over procedural modules, fostering a fresh perspective on object-orientation tailored for extensible software systems. The modularity concepts of Modula-2 have also indirectly shaped modern languages, such as Go, where the package system for organizing code and managing dependencies echoes Modula-2's module imports and encapsulation. Go's designers at drew from Modula-2 to ensure compiled packages include necessary for type-safe interactions, simplifying large-scale development while avoiding the verbosity of earlier modular languages.

Implementations and Tools

Compilers and Interpreters

Development of Modula-2 compilers began in the late at , where and his team created the initial implementations, with the first Modula-2 compiler completed in 1979 for the DEC PDP-11 . Subsequent implementations for the running the Modula-based LilithOS, completed around 1982, were multi-pass systems that generated intermediate M-Code, enabling portability across hardware. In 1985, J. Gutknecht and Wirth released a single-pass that improved performance by approximately four times compared to prior multi-pass versions, targeting the same platform and emphasizing efficiency for . Commercial interest spurred additional early compilers, with Logitech S.A. producing the first widely available one in 1983 for personal computers, including and systems, which supported separate compilation of modules and became a benchmark for portability on 8086 architectures. 's Turbo Modula-2, released in 1986, offered an integrated and editor for , closely adhering to Wirth's Programming in Modula-2 (second edition) and generating optimized code for PC compatibles, though it was short-lived before shifted focus to other languages. developed a Modula-2 for its VM/ environment on the System/370 mainframe, originating from work at TU , and later employed the language extensively in programming the AS/400 operating system, highlighting its suitability for large-scale enterprise applications. In the modern era, open-source efforts have sustained Modula-2's viability. GNU Modula-2, integrated as a front-end to the () since 2003, complies with PIM2, PIM3, PIM4, and ISO Modula-2 standards, supporting platforms like , macOS, BSD, , and cross-compilation to and other architectures for embedded targets. It remains actively maintained, with version 1.0 released in 2023 and ongoing updates in 15 as of 2025. As of 2025, it is fully integrated into 15, providing enhanced performance and support for additional platforms. Another notable tool is M2C, a GPL-licensed Modula-2-to-C translator compliant with PIM3 and PIM4, designed for systems and leveraging for final compilation, though development ceased around 2014. Interpreters for Modula-2 have primarily served educational and purposes, rooted in the original M-Code from the era. Modern recreations, such as the m2emul project, provide a portable M-Code interpreter with minimal libraries, allowing execution of classic Modula-2 programs on contemporary systems without compilation, ideal for teaching language concepts and historical code analysis. These tools facilitate quick prototyping and in academic settings, preserving Modula-2's structured approach while avoiding the overhead of full compilation pipelines.

Integrated Development Environments

One of the earliest integrated development environments for Modula-2 was Stony Brook Modula-2, developed by Stony Brook Software for and later expanded to and Windows platforms starting in version 2.0 in 1989. This included the M2EDIT editor, M16 for stepping through code and inspecting variables, a linker for building executables, and tools to handle multi-module programs. It supported separate compilation by generating object files from individual modules, allowing efficient incremental builds, and provided low-level capabilities such as register inspection and memory dumps. Following its commercial discontinuation in 2005, a version was released in 2011 under ADW Software, maintaining compatibility with 32- and 64-bit Windows while preserving the core features including the integrated . A notable cross-platform option was the XDS Modula-2/ environment from , which offered both a classic and an Eclipse-based plugin system since 2016 for Windows and . Key features included module dependency graphs visualized through browser-style options that recursively scan clauses to map relationships between modules. It supported separate compilation via MAKE and PROJECT modes, recompiling only modified dependencies based on symbol files (.sym) and timestamps, and integrated a with low-level access such as disassembly views, memory dumps at arbitrary addresses, CPU register modification, and support for inline . The used HLL4 format optimized for Modula-2, enabling source-level stepping (e.g., for step into) and post-mortem stack tracing with GENHISTORY for . In modern development, tools like the Modula-2 VS Code extension provide and code snippets for PIM4 dialect files, aiding editing but lacking built-in building or debugging. The Lazarus IDE can be extended with for Modula-2 via addons like CudaText, offering cross-platform suitable for ISO standard , though full integration requires pairing with underlying compilers. For the community-proposed Modula-2 R10 revision (2010) and ISO Modula-2 (IEC 10514-1:1996), development environments remain limited, often relying on general-purpose editors like VS Code or adaptations, with no dedicated IDEs supporting mobile or advanced cross-compilation platforms. These tools emphasize Modula-2's modular structure, but contemporary support lags in advanced cross-platform features compared to more popular languages.

Applications and Use Cases

Embedded Systems

Modula-2's suitability for systems stems from its design emphasis on , which enables clean separation of hardware-specific code through modules, facilitating without introducing unnecessary complexity. The language's lack of automatic garbage collection and reliance on static allocation contribute to no runtime overhead, ensuring predictable usage in resource-constrained environments. Additionally, its for coroutines and low-level facilities allows for deterministic behavior in applications, where timing predictability is critical. These features make Modula-2 particularly advantageous for development on microcontrollers, as opposed to more general-purpose languages that may impose dynamic overhead. Early implementations targeted legacy microprocessors, with compilers like those for Z80-based systems under providing cross-compilation support for embedded targets. The Modula-2 compiler, based on a of the PIM4 with extensions for embedded development, supported Z80 environments, enabling efficient for 8-bit systems used in industrial and control applications. Similarly, the Mod51 compiler extends ISO Modula-2 for 8051-family microcontrollers, generating standalone, optimized code that adheres to standards for programmable logic controllers, with the smallest programs as compact as 14 bytes to fit tight memory constraints. These tools facilitated cross-compilation from host machines like to embedded targets, promoting portability and reducing development time. In industrial applications, variants like Modula-GM were developed by for ' embedded control systems starting in the , replacing code in controllers and marking one of the first high-level language adoptions in automotive . By the , Modula-GM powered integrated controllers in trucks, managing , transmission, , and diagnostics with modular structures that enhanced maintainability in safety-relevant domains. The language's use extended to , where Modula-2 has been used to program real-time navigation software for Russia's satellites since the , with continued use in current generations as of 2023, leveraging its deterministic execution for mission-critical orbital computations. Modula-2's strong typing and modular encapsulation have positioned it well for safety-critical systems, with analyses recommending well-defined subsets to meet standards like those for . Its application in vehicle controllers and satellite systems demonstrates compliance potential in environments requiring high reliability, though formal certifications remain tied to specific implementations rather than the language core. Recent interest in porting Modula-2 to modern low-end platforms like for has been noted but lacks widespread documentation or standardized tools, limiting its adoption in contemporary connected devices compared to historical uses.

Operating Systems and Systems Programming

Modula-2 was specifically designed as a language, incorporating features like modules for structured decomposition and low-level access primitives to facilitate the development of operating systems and related software components. Its emphasis on modularity and made it suitable for building reliable kernel-level code and device interfaces, where error-prone low-level operations are common. One prominent example of a Modula-2-based operating system is Medos-2, developed at ETH Zurich for the Lilith personal workstation in the early 1980s. Medos-2 is a memory-resident system entirely implemented in Modula-2, structured as a collection of separate modules that provide interfaces for file management, process handling, and device I/O. The kernel, known as SEK (System Executive Kernel), runs as a single Modula-2 program, with additional modules handling peripherals like disks and displays, demonstrating Modula-2's ability to encapsulate hardware-specific code while maintaining portability across similar architectures. This design drew inspiration from earlier systems like Xerox's Pilot but adapted Modula-2's module system for a more disciplined approach to OS construction. In educational contexts, Modula-2 has been widely used for teaching operating systems principles, particularly at institutions like ETH Zurich and the University of Texas at Austin. Students have implemented process managers and schedulers in Modula-2, leveraging its coroutines for simulating concurrency and its strong typing to avoid common pointer errors in kernel code. For instance, projects involved building a simple multiprogramming environment with modules for memory allocation and interrupt handling, highlighting Modula-2's suitability for prototyping OS components without the undefined behaviors prevalent in C. Modula-2's application extends to device and extensions, where its low-level facilities—such as absolute addressing and inline —enable direct manipulation while enforcing modular boundaries to isolate driver code. Systems like PMOS/2 provided Modula-2 modules for interacting with OS/2's , allowing developers to write drivers for devices like networks and storage with better abstraction than C's macro-based interfaces. Additionally, portable real-time operating systems such as XMod were built using Modula-2 to support embedded tasks across different processors, emphasizing its role in concurrent . Compared to , Modula-2 offers advantages in systems programming through stricter type checking, which reduces runtime errors in multi-threaded , and explicit module exports that prevent unintended global namespace pollution. These features proved particularly beneficial in concurrent environments, where Modula-2's support facilitated safer implementation of process synchronization primitives than C's signal handlers. The Stand-Alone Modula-2 System (SAM2S) exemplifies this by providing a concurrent OS with Modula-2 modules for task switching and , achieving portability without sacrificing performance.

Influence and Legacy

Modula-2 exerted a direct influence on the family of languages, developed by starting in 1987 as a successor aimed at enhancing power while reducing complexity. Oberon simplified Modula-2's modularity by eliminating features like variant records and low-level concurrency primitives, instead emphasizing object-oriented extensions through extensible type definitions and a unified module-interface-implementation structure that promoted cleaner encapsulation. This evolution maintained Modula-2's core focus on separate compilation and but streamlined syntax for better readability and implementation efficiency in systems environments. Modula-3, designed in the late by a committee at and including Luca Cardelli, James Donahue, and Lucille Glassman, built closely on Modula-2 and its extension Modula-2+ to address safety shortcomings. It introduced garbage collection for automatic , traced references to avoid dangling pointers, and explicit "unsafe" modules to isolate low-level operations, thereby enhancing and preventing common runtime errors in concurrent programs without sacrificing Modula-2's modular discipline. These features made Modula-3 suitable for large-scale, reliable systems software while preserving the procedural and modular heritage of Modula-2. The encapsulation and separate mechanisms of Modula-2 contributed to broader impacts in contemporary systems languages, particularly Go's package . Go incorporates significant elements from the Modula-2 lineage, using packages for organization, explicit paths, and per-package object files to enforce dependency precision and avoid circular imports, which streamlines builds and supports scalable in distributed environments. This design echoes Modula-2's emphasis on modular boundaries to manage complexity in team-based development. Niklaus Wirth's progression from Modula-2 to marked a pivotal shift in paradigms, transitioning from strictly procedural structures toward integrated modular and object-oriented approaches that prioritized , verifiability, and hardware-software co-design. This legacy underscored the value of disciplined in fostering reliable, maintainable codebases, influencing subsequent languages to adopt similar principles for safe concurrency and in resource-constrained settings.

Literature and Key Publications

The seminal work on Modula-2 is Niklaus Wirth's "Programming in Modula-2," first published in 1982 by Springer-Verlag, which serves as both an introduction to programming principles and a comprehensive manual for the language's syntax, semantics, and system. This text emphasizes , data abstraction through modules, and low-level facilities for systems implementation, drawing directly from Wirth's design goals for the language. The fourth edition, released in , incorporates refinements based on implementation experience and remains the authoritative reference for the original Modula-2 definition. Another influential early text is "Introduction to Modula-2" by Jim Welsh and John Elder, published in 1985 by Prentice-Hall, which provides practical guidance for beginners transitioning from Pascal, with numerous examples illustrating module definitions, separate compilation, and concurrent programming features. The book focuses on real-world application of Modula-2's modular structure to foster readable and maintainable code, making it a key resource for educational settings during the language's initial adoption. A second edition in 1987 expanded coverage of libraries and error handling. For a broader perspective on with Modula-2, "Software Engineering with Modula-2 and Ada" by Richard Wiener and Richard Sincovec, published in 1984 by John Wiley & Sons, explores the language's role in large-scale development, including abstract data types, reusability via libraries, and integration with tools for verification. This work highlights Modula-2's advantages over Pascal for team-based projects, supported by case studies in . Key foundational papers include Wirth's "Modula-2" report from 1978, an technical report that outlines the language's core design as a successor to , introducing separate compilation, coroutines for concurrency, and support for multiprogramming without altering Pascal's simplicity. A revised edition in 1980 refined the syntax and added details on low-level operations. These documents established Modula-2's principles for reliable . The of Modula-2 is documented in the ISO/IEC 10514 series, with the base language standard ISO/IEC 10514-1:1996 specifying the core syntax, types, modules, and statements, ensuring portability across implementations. Subsequent parts, such as ISO/IEC 10514-2:1998 for extensions, built on this foundation to address evolving needs in reusable code.

References

  1. [1]
    About Modula-2
    Modula-2 is a programming language developed by Niklaus Wirth at ETH in Zurich, Switzerland in the late 70's. Wirth also developed Algol-W, Pascal, Modula, and ...
  2. [2]
    MODULA-2 - Research Collection
    Report. MODULA-2. MODULA-2. OPEN ACCESS. Downloads. Full text (PDF, 2.32 MB) vertical_align_bottom. Author / Producer. Wirth, Niklaus. Date. 1980-03 ...Missing: original | Show results with:original
  3. [3]
    A Brief History of Modula and Lilith
    The entire software was programmed in Modula-2, a language derived from Pascal within the Lilith project. It featured the module with explicit interface ...
  4. [4]
    Category:Modula-2 - Rosetta Code
    Modula-2 was designed by Niklaus Wirth at ETH Zurich as a systems implementation language for the operating system of the Lilith workstation, a project ...
  5. [5]
    Report on The Programming Language Modula-2 - SpringerLink
    Download book PDF · Programming in Modula-2. Report on The Programming Language Modula-2. Download book PDF. Niklaus Wirth. Part of the book series: Texts and ...Missing: original | Show results with:original
  6. [6]
    Differences between Modula-2 and Pascal - ACM Digital Library
    This paper outlines syntactical and semantical differences between Modula-2 and. Pascal. Readers who know Pascal and intend to learn Modula-2 will benefit ...
  7. [7]
    Lilith and Modula-2 - Astrobe
    The first Modula-2 compiler was completed in 1979 and ran on the DEC PDP-11. This is the source code of the PC version of the second Modula-2 compiler. It ...
  8. [8]
    [DOC] The History of Modula-2 and Oberon - Ethz
    This is an account of the development of the languages Modula-2 and Oberon. Together with their ancestors ALGOL 60 and Pascal they form a family called Algol- ...
  9. [9]
    Modula-2 - EDM2
    Jan 27, 2024 · Structured procedural systems language introduced by Niklaus Wirth in 1979, based on his earlier Modula language.Missing: key | Show results with:key
  10. [10]
    [PDF] Computers and Computing - Ethz
    Hence, just as Mesa was the language for the. Alto, I designed Modula-2 for the Lilith. The main inspiration came from Mesa. But. Mesa was already far too ...
  11. [11]
    [PDF] A Brief History of Software Engineering - Ethz
    Feb 25, 2008 · Just as structured programming had been the guiding spirit behind Pascal, modularization was the principal idea behind the language Modula-2, ...
  12. [12]
    [PDF] ETH Report 36 - Modula-2
    Niklaus Wirth. MODULA-2. March 1980. 36. Page 2. Page 3. MODULA-2. N. Wirth. Abstract. Modula-2 is а general purpose programming language ...Missing: original | Show results with:original
  13. [13]
    ISO/IEC 10514-1:1996 - Programming languages
    Gives definition of the language Modula-2 and its standard library and specifications for symbols for Modula-2 program representation.
  14. [14]
    The Programming Language Modula-2:
    Sep 26, 2002 · Modula-2 grew out of a practical need for a general, efficiently implementable systems programming language for minicomputers.Missing: Preliminary | Show results with:Preliminary
  15. [15]
    ISO/IEC 10514-2:1998 - Programming languages
    2–5 day delivery1.1 General. This part of ISO/IEC 10514 specifies extensions to allow generic programming facilities to be added to the base Modula-2.
  16. [16]
  17. [17]
    [PDF] MODULA-2 - ETH Research Collection
    Modula-2 is a general purpose programming language primarily designed for systems implemenation. This report constitutes its definition in a concise, although ...
  18. [18]
    Definition Modules - Modula-2 reference
    Modules are the unit of program decomposition. Modula-2 supports bothseparately compiled modules and local modules within a compilation unit.
  19. [19]
  20. [20]
  21. [21]
  22. [22]
    Modula-2 reference
    ### Control Statements in Modula-2
  23. [23]
    Procedure Declarations - Modula-2 reference
    Modula-2 procedures can be called recursively. The procedure can be called from its own body, or by other procedures called from its body. Each recursive ...
  24. [24]
    Vocabulary & representation - Modula-2 reference
    These reserved words consist exclusively of capital letters and must not be used in the role of identifiers. The symbols # and <> are synonyms, and so are &, ...Missing: standard keywords
  25. [25]
    Declarations & scope rules - Modula-2 reference
    Standard identifiers. Standard identifiers are considered to be predeclared, and they are valid in all parts of a program. For this reason they are called ...Missing: built- | Show results with:built-
  26. [26]
    Modula-2 FAQ - Arjay Books
    ISO Modula-2 has resolved most of the ambiguities in classical Modula-2. It adds the data type COMPLEX and LONGCOMPLEX, exceptions, module termination (FINALLY ...
  27. [27]
    ISO Library modules - Modula-2 reference
    EXCEPTIONS, Provides facilities for raising user exceptions and for making enquiries concerning the current execution state. TERMINATION, Provides facilities ...
  28. [28]
    Ulm's Modula-2 Library: InOut
    WriteOct and WriteHex write a cardinal number in octal/hexadecimal format. EXAMPLE. Reading of two integer values from standard input: WriteString("i = "); ...
  29. [29]
    Dialect (The GNU Modula-2 Compiler)
    ### Summary of Modula-2 Dialects Supported by GNU Modula-2
  30. [30]
    [PDF] The GNU Modula-2 Compiler
    1.2 Why use GNU Modula-2. There are a number of advantages of using GNU Modula-2 rather than translate an existing project into another language.Missing: challenges vendor variations
  31. [31]
    The international standardization of Modula-2 - ACM Digital Library
    The Modula-2 Programming Language. Modula-2 is a general-purpose programming language de- signed in the late 1970s by Niklaus Wirth, the creator of Pas- cal ...
  32. [32]
    The Language - Modula-2
    The major components are the compilation modules: program modules, definition modules, and implementation modules.
  33. [33]
    Ulm's Modula-2 System: m2c
    This compiler supports three versions of Modula-2: unrevised Modula-2 as defined in 1st and 2nd edition of Wirth's Programming in Modula-2 ( N = 0), revised ...Missing: dialects variants
  34. [34]
    [PDF] On extending Modula-2 for building large, integrated systems
    Jan 11, 1985 · Modula-2+ extends Modula-2 with features for exceptions, finalization, garbage collection, concurrency, signalling, and type-safe storage ...Missing: stable | Show results with:stable
  35. [35]
    [PDF] TopSpeed - ClarionHub
    Modula-2 Library Extensions ... As names in TopSpeed Modula-2 and TopSpeed Pascal are overloaded between modules, it is often best to include the module ...
  36. [36]
    [PDF] An Overview of Objective Modula-2
    This document provides an overview of Objective Modula-2, a reflective, object ori- ented programming language which features both static and dynamic typing.
  37. [37]
    Modula-2 and Oberon | Proceedings of the third ACM SIGPLAN ...
    This is an account of the development of the languages Modula-2 and Oberon. Together with their ancestors ALGOL 60 and Pascal they form a family called Algol- ...Missing: original | Show results with:original<|control11|><|separator|>
  38. [38]
    [PDF] Modula-3 report (revised) - Bitsavers.org
    Nov 1, 1989 · SRC began recruiting its first research scientists in 1984 their charter, to advance the state of knowledge in all aspects of computer systems ...Missing: history | Show results with:history
  39. [39]
    The Modula–3 type system - ACM Digital Library
    ABSTRACT. This paper presents an overview of the programming language Modula-3, and a more detailed description of its type system.
  40. [40]
    Modula-3 Historical Archive - Software Preservation Group
    This is an annotated collection of documents, source code, and other materials concerning the birth, development, and use of the Modula-3 programming language.
  41. [41]
    [PDF] The Programming Language Lagot^na - eScholarship
    Lagoona is a strongly-typed object-oriented programming language based on Oberon. Lacking the class construct found in traditional object-oriented languages ...
  42. [42]
    The Programming Language Lagoona - A Fresh Look at Object ...
    The purpose of this article is to answer two questions: "What are the requirements that a modern type system for an object-oriented database programming ...Missing: Modula- | Show results with:Modula-
  43. [43]
    The Origins of Go (The Go Programming Language)
    Modula-2 inspired the package concept. Oberon eliminated the distinction between module interface files and module implementation files. Oberon-2 influenced the ...
  44. [44]
    The Go Programming Language and Environment
    May 1, 2022 · Go avoids this work by arranging, similar to Modula-2, for the compiled fmt package's metadata to contain everything necessary to know ...
  45. [45]
    GunterMueller/ETHZ-Modula-2_Compilers: Source Code ... - GitHub
    They correspond to the versions of the language as described in the Third (1985) and Fourth Editions (1988) of the reference: Programming in Modula-2, N. Wirth, ...
  46. [46]
    Logitech Modula-2 - EDM2
    Aug 25, 2022 · Logitech Modula-2 is a historically important compiler for 16-bit DOS and OS/2, developed by Logitech, and later became a complete DOS ...Missing: LogiSoft | Show results with:LogiSoft
  47. [47]
    If Only Borland Had Stuck With Turbo Modula-2 For CP/M
    Mar 12, 2013 · Turbo Modula-2 was an Integrated Development Environment including a compiler and Wordstar based editor. On top of this TM-2 added a separate linker and ...
  48. [48]
    [PDF] Modula-2 News
    lritten In Modula-2,. Preventing Storage Overflows In High-Level Languages,,. March 1980, ETH Report No.35, "Modula-2r'(second edition, Dec. 1gB0).
  49. [49]
    List of Modula-2 Compilers
    This list includes open source, closed source freeware, and commercial Modula-2 compilers. Examples include ACK, GNU Modula-2, and Cambridge Modula-2.Open Source Modula-2... · Commercial Modula-2 CompilersMissing: dialects | Show results with:dialects
  50. [50]
    Modula-2 Compiler and Translator - Summary - Savannah.nongnu.org
    Sep 18, 2014 · Modula-2 was implemented for DEC RT-11 and Medos on Lilith. Around the time the Oberon system was transitioning from the Ceres-1 to Ceres-2, the ...Missing: variants | Show results with:variants
  51. [51]
    gh055/m2emul: Modula-2 M-Code Interpreter - GitHub
    May 9, 2022 · Provides a minimal set of "standard" Modula-2 runtime libraries to run a simple command interpreter and the ETHZ single pass compiler developed ...Missing: M2Interpreter education
  52. [52]
    Stony Brook Professional Modula-2 - EDM2
    Aug 25, 2022 · It also had a linker, an editor called M2EDIT, a debugger called M16, a run-time library and support for multitasking on all target ...Missing: IDE | Show results with:IDE
  53. [53]
    Stony Brook Modula-2 Development System - TERRA Datentechnik
    Nov 12, 2002 · The environment is extremely flexible. Not only can the environment use the editor debugger, linker, librarian and resource editor provided by ...Environment · Compiler · Resource Editor · Modula-2 Language FeaturesMissing: IDE | Show results with:IDE
  54. [54]
    Text Editors and Integrated Development Environments - Modula-2
    The big advantage of this setup is that your programs will configure, build and mostly work on nearly every GCC-based operating system like Linux or the BSDs.Missing: Jade | Show results with:Jade
  55. [55]
    [PDF] Native XDS-x86 User's Guide - Modula-2
    XDSTM is a family name for professional Modula-2/Oberon-2 programming sys- tems for Intel x86-based PCs (Windows and Linux editions are available). XDS.
  56. [56]
    [PDF] Native XDS-x86 XDS Debugger User's Guide - Modula-2
    To set a break, select an appropriate command from the Breaks menu (or press a shortcut key). Access breaks (see 3.6.8) may also be set from pop-up menus in.
  57. [57]
    Modula-2 syntax highlighting for Visual Studio Code - GitHub
    Modula-2 syntax highlighting and snippets for Visual Studio Code. This extension provides syntax highlihting and snippets for Modula-2.
  58. [58]
    Introduction - Free Modula-2 Pages
    Modula-2 is a language offering both powerful and modern concepts like strict modularization or exception-handling (in ISO Modula-2.
  59. [59]
    Modula-2 in Embedded Systems
    Sep 24, 1991 · In the years 1977 to 1981 Prof. N. Wirth developed Modula-2 as a further member of the family of the Algol, Pascal and Modula programming ...
  60. [60]
    Safety Critical Systems Development
    ... safety-critical embedded systems and other interesting systems. ... '93+ GM trucks vehicle controllers mostly in Modula-GM (Modula-GM is a variant of Modula-2.
  61. [61]
    Modula-2 Language Frontend Patches Ready For Merging Into GCC ...
    Dec 6, 2022 · Modula-2 enjoyed use by the Lilith workstations, the Russian GLONASS navigation satellites, and various aging embedded systems. For several ...
  62. [62]
    None
    Error: Could not load webpage.<|separator|>
  63. [63]
    [PDF] Medos-2: A Modula-2 Oriented Operating System for the Personal ...
    The value of the special features provided for low-level programming in Modula-2 depends of course on the actual application. In the implementation of Medos-2, ...
  64. [64]
    Medos-2 - Research Collection - ETH Zürich
    Medos-2. Medos-2. a Modula-2 oriented operating system for the personal computer Lilith. OPEN ACCESS. Downloads. Abstract (PDF, 113.67 KB) vertical_align_bottom.
  65. [65]
    [PDF] Porting Medos-2 onto the Ceres Workstation - Bitsavers.org
    The operating system Medos-2 has been ported from a totally Modula-2 oriented environment to the new workstation Ceres. Although Medos-2 has been written ...
  66. [66]
    Teaching operating systems with Modula-2 - ACM Digital Library
    This paper overviews the capabilities of Modula-2 and describes a programming project in which students implement a process manager for an operating system. The ...
  67. [67]
    [PDF] Teaching Operating Systems with Modula-2
    The most significant features of Modula-2 are those that extend Pascal. Modula-2 allows data objects and procedures to be grouped together into modules. A ...<|separator|>
  68. [68]
    Dev - Modula - OS/2 Site
    PMOS/2 is a set of Modula-2 modules designed to be used in conjunction with the OS/2 operating system. It is, in fact, an OS/2 port of the PMOS library, which ...<|control11|><|separator|>
  69. [69]
    Portable MODULA-2-based realtime operating system - ScienceDirect
    A portable software development methodology has been developed based on modula-2. Using this approach it was possible to implement XMod for different ...
  70. [70]
    A portable modula-2 operating system: SAM2S - ACM Digital Library
    The Stand-Alone Modula-2 System (SAM2S) is a portable, concurrent operating system and Modula-2 programming support environment. It is based on a highly modular ...Missing: Amoeba | Show results with:Amoeba
  71. [71]
    Modula-3: Introduction - Purdue Computer Science
    The Modula-3 design was a joint project by Digital and Olivetti. The language definition was published in August 1988, and immediately followed by ...Missing: DEC | Show results with:DEC
  72. [72]
    Frequently Asked Questions (FAQ) - The Go Programming Language
    Go is mostly in the C family (basic syntax), with significant input from the Pascal/Modula/Oberon family (declarations, packages) ...
  73. [73]
    Go at Google: Language Design in the Service of Software ...
    Go's purpose is therefore not to do research into programming language design; it is to improve the working environment for its designers and their coworkers.
  74. [74]
    Programming in Modula-2 - SpringerLink
    This text is an introduction to programming in general, and a manual for programming with the language Modula-2 in particular.Missing: key | Show results with:key
  75. [75]
    Introduction to Modula-2 - Jim Welsh, John Elder - Google Books
    Authors, Jim Welsh, John Elder ; Edition, 2, illustrated ; Publisher, Prentice-Hall International, 1987 ; Original from, the University of California ; Digitized ...
  76. [76]
    Introduction to Modula-2 (Prentice Hall International Series in ...
    14–30 day delivery 30-day returnsIntroduction to Modula-2 (Prentice Hall International Series in Computer Science). Welsh, Jim,Elder, John. Published by Prentice Hall, 1987. ISBN 10: 0134886100 ...
  77. [77]
    Modula-2: A Software Development Approach - Google Books
    Apr 2, 1986 · Bibliographic information ; Publisher, Wiley, 1986 ; Original from, Pennsylvania State University ; Digitized, Jan 5, 2011 ; ISBN, 0471844438, ...