Fact-checked by Grok 2 weeks ago

Modula

Modula is a structured, imperative programming language developed by Niklaus Wirth in 1977 at the Eidgenössische Technische Hochschule (ETH) Zurich in Switzerland, as an extension of Pascal designed specifically for modular multiprogramming in dedicated computer systems, such as those used for real-time process control on small machines. The language introduces a module concept that builds on Pascal's block structure, enabling programmers to encapsulate procedures, data types, and variables while precisely controlling name visibility and communication between modules to support the development of large, maintainable programs. It also incorporates multiprocessing features, including processes, interface modules, and signals, to handle concurrent execution in resource-constrained environments. Modula was motivated by the need for a high-level suitable for on s, addressing limitations in earlier languages like Pascal by emphasizing and concurrency without sacrificing efficiency. An initial implementation targeted the PDP-11 family, with a written in that generated compact code comparable in quality to hand-optimized , demonstrating its viability for applications such as schedulers and executive systems. The 's design principles prioritized simplicity, , and explicit control over hardware interactions, including specifications for peripheral devices. Although Modula saw limited adoption and implementation beyond experimental use at , it served as a foundational step in Wirth's evolution of programming languages, directly influencing the development of in 1979, which refined its module system for separate compilation and broader applicability. addressed some of Modula's concurrency complexities while retaining its core emphasis on structured modularity, paving the way for further successors like .

History

Development

, professor of computer science at in , designed the Modula programming language in 1975, building directly on his prior development of Pascal to extend its capabilities for more complex systems. In the mid-1970s, Wirth conducted early experiments with concurrency concepts, driven by the need to support multiprogramming in dedicated computer systems such as process control applications, where Pascal's sequential focus proved limiting for large-scale software involving concurrent processes. Modula first appeared in 1975 as an experimental emphasizing to enable better encapsulation and management of concurrent operations, addressing Pascal's inadequacies in handling hardware dependencies and system-level programming. Its formal definition was outlined in Wirth's 1976 technical report, "Modula: A Language for Modular Multiprogramming," which detailed the language's core for programming small machines with minimal runtime support and interfaces. Despite an initial experimental , of Modula was discontinued shortly after its owing to significant challenges, particularly in realizing its concurrency features on contemporary .

Initial Implementations

The initial implementation of Modula was carried out by himself on the PDP-11 minicomputer, targeting dedicated real-time systems with a focus on efficient multiprogramming support. This experimental emphasized run-time administration of processes and signaling mechanisms, leveraging the PDP-11's architecture for low-level access while maintaining high-level abstractions. The implementation, detailed in Wirth's 1977 paper, demonstrated Modula's viability on 16-bit hardware but highlighted the need for careful due to the era's memory limitations, typically 64 KB or less. In the late 1970s, researchers at the developed one of the earliest production-oriented Modula compilers for the PDP-11 family, including the LSI-11 variant. Written in and operating under the RSX-11D operating system, this four-pass generated relocatable code for a compact executive under 150 words, enabling modular multiprogramming on resource-constrained minicomputers. The York implementation supported process synchronization via monitors and was tested on applications like process control, producing code efficiency comparable to other high-level languages on the PDP-11. However, it enforced a strict "declaration before use" rule that complicated modular organization in larger programs, requiring awkward workarounds. Philips Laboratories extended Modula's reach with the PL.Modula , specifically tailored for the LSI-11 in 1980. Implemented in Pascal under the UCSD p-System, it featured a two-stage process: a front-end translator converting Modula source to portable P-code, followed by a backend code generator producing native LSI-11 assembly. This approach allowed minor extensions to the original specification, such as improved I/O handling, while preserving Modula's core module and process features for embedded applications. The targeted the LSI-11's 16-bit architecture, which shared with the PDP-11 but offered lower cost for use. Despite these efforts, Modula's initial implementations faced significant challenges that contributed to its rapid discontinuation by the early . Key issues included the absence of pointers and dynamic storage allocation, which forced static sizing and limited flexibility in applications like management; restrictive rules prohibiting reentrancy, signaling, or non-local calls; and hardware dependencies on interrupts and scheduling not universally available on microprocessors like the 8080. These design choices, while innovative for multiprogramming, proved cumbersome for broader , often requiring compiler-specific hacks that undermined . Adoption remained limited primarily due to the hardware constraints of PDP-11 and LSI-11 platforms, such as restricted and power that amplified inefficiencies in process overhead, alongside the scarcity of standardized development tools and debuggers for a nascent . Without widespread vendor support or portable implementations, Modula saw use mainly in academic and niche embedded contexts before Wirth pivoted to to address these shortcomings.

Design and Philosophy

Goals and Innovations

Modula was designed as an imperative, , and language to address the limitations of earlier languages in handling large-scale , particularly on resource-constrained minicomputers. Its primary goal was to enable modular multiprogramming, allowing programmers to express concurrent activities in dedicated computer systems such as process control applications, where multiple processes interact efficiently without excessive runtime overhead. By extending the principles of from Pascal, Modula aimed to conquer the domain traditionally dominated by , providing a high-level alternative that supports device operations and while maintaining simplicity. A key innovation in Modula is the introduction of modules as the fundamental syntactic units for encapsulation, which separate the from the to promote controlled visibility and reduce in large programs. Modules act as "fences" around their objects, exporting only necessary names via explicit lists while hiding internal details, thereby facilitating modular and reuse in multiprogramming environments. This design supports the construction of concurrent systems by allowing processes to communicate through signals and shared modules, minimizing global state issues and enhancing . Modula's typing system emphasizes static, , and typing to prevent type-related errors that could arise in modular and concurrent contexts, ensuring that type checks occur at without penalties. Complementing this, the employs lexical scoping rules within blocks and modules, which enforce local visibility and prevent unintended interactions across modular boundaries, thus supporting robust without compromising . Overall, Modula prioritizes and , targeting small computers with minimal support and fast compilation to make accessible and performant.

Relation to Pascal

Modula was developed as a direct descendant of Pascal, a structured programming language designed by Niklaus Wirth in 1970 to promote clear and disciplined programming practices. While Pascal emphasized sequential programming through its block structure and control mechanisms, Modula extended this foundation to support modular decomposition and concurrency, addressing Pascal's shortcomings in handling large-scale systems and multiprogramming environments. Modula retained core elements from Pascal to maintain familiarity and leverage its strengths in . These include the block structure, which organizes code into nested scopes for systematic design; control structures such as , case, while, and repeat loops (with minor syntactic adjustments for explicit termination using "end" keywords); and basic data types like integers, Booleans, characters, arrays, and records, while omitting Pascal's variant records and pointers to simplify semantics. These retained features ensured Modula's compatibility with Pascal's educational and developmental goals, allowing programmers to transition smoothly while benefiting from enhanced . The primary evolution in Modula was the introduction of modules, which addressed Pascal's limitations in organizing large programs by encapsulating procedures, data types, and variables within units that control visibility through export and import lists, providing a foundation for separate compilation in later developments like Modula-2. This module system removed syntactic ambiguities present in Pascal, such as implicit scoping in multi-file projects, enforcing stricter modularity via explicit interfaces that promote and reusability. Furthermore, Modula extended Pascal's paradigm to multiprogramming by incorporating processes for concurrent execution, signals for , and interface modules for , enabling the language's application in systems like process control.

Language Specification

Syntax and Structure

Modula programs are structured around , which serve as the fundamental units of organization, encapsulating related declarations and statements to promote in system programming. Each consists of a header specifying the module name, a define-list identifying exported identifiers visible to other modules, and a use-list specifying imported identifiers from other modules. The module body, enclosed within a begin-end , contains the declarations and statements that implement the module's functionality. This design allows for separate compilation of modules while maintaining clear interfaces, as detailed in Wirth's original definition. Basic syntactic rules in Modula emphasize readability and structure, inheriting much from Pascal. Statements are terminated by semicolons, and sequences of statements are grouped into compound statements using begin-end delimiters, such as begin statement1; statement2; end. The language employs a block structure that supports nested scopes, with declarations preceding the statements within each block. Comments are enclosed in (* and *), and the syntax is defined using an extended Backus-Naur form for precision. These rules facilitate efficient and on minicomputers, aligning with Modula's goals for dedicated systems. Within a or , declarations follow a fixed order: constants first, followed by types, , , modules, and processes. This sequential arrangement ensures that dependencies are resolved top-down, with each category of declaration building upon prior ones. For instance, type declarations must precede variable declarations that use them, promoting clarity and preventing forward references except where explicitly allowed, such as in procedure headings. Modula's keywords include reserved words such as module, define, use, begin, end, procedure, if, while, and others that delineate structural elements. The language is case-insensitive, treating identifiers like Module and module as equivalent, which enhances readability without imposing strict formatting conventions. This Pascal-like approach to syntax prioritizes human readability alongside machine efficiency. A simple module structure in Modula can be outlined as follows:
module ModuleName;
define ExportedIdentifier1, ExportedIdentifier2;
use ImportedIdentifier;
const ConstantName = value;
type TypeName = declaration;
var VariableName: TypeName;
procedure ProcName(parameters): returnType;
begin
  body statements;
end ProcName;
begin
  main module statements;
end ModuleName.
This skeleton illustrates the hierarchical layout, where the main body executes upon module activation, and sub-elements like procedures follow the declaration order.

Module System

Modula's module system promotes by organizing code into self-contained s that encapsulate declarations and functionality, supporting modular multiprogramming in dedicated systems. A is defined with a name, followed by a define-list specifying exported identifiers (such as procedures, types, or variables) that are visible to other s, and a use-list indicating imported identifiers from other s for qualified access (e.g., ModuleName.Identifier). The module body includes local declarations and a statement sequence, all enclosed in begin ... end. Exported variables are accessible but read-only from outside the , preventing unintended modifications and enforcing data protection. Encapsulation is achieved by limiting : only items in the define-list are exported, while local identifiers remain hidden. Opaque types can be declared in the (e.g., TYPE [Handle](/page/Handle);), revealing their structure only internally, which supports data abstraction by allowing interaction solely through exported procedures. This design enables separate compilation of modules, as interfaces are explicitly defined via define and use lists, allowing dependencies to be resolved at link time without recompiling unaffected parts. In multiprogramming contexts, modules facilitate concurrency by serving as units for processes and providing interfaces for . Processes are declared similarly to modules but include a body for concurrent execution, and modules can export signals or coroutines for communication (e.g., a module defining semaphores with procedures like Wait and Signal). For instance, an interface module might export primitives to coordinate processes without exposing internal state. A representative example of a simple module:
module MathLib;
define Compute, Qualification;
type Qualification = record x, y: real end;
procedure Compute(var q: Qualification): real;
begin
  return q.x * q.y
end Compute;
begin
  (* module initialization if needed *)
end MathLib.
Another module can import and use it via use MathLib; ... result := MathLib.Compute(myQual);, demonstrating controlled access and while maintaining encapsulation.

Data Types and Control Flow

Modula's type system builds upon the structured approach of Pascal, emphasizing strong static typing to ensure type safety and modularity in systems programming. Basic data types include integer for whole numbers, typically ranging from -32768 to 32767 on target architectures like the PDP-11; Boolean with values true and false; char for single characters in ASCII encoding; and bits as fixed-length arrays of Boolean elements, such as 16 bits for low-level bit manipulation. Structured types extend these with arrays, defined as array indexrange of type (e.g., array 1:100 of integer), and records, structured as record fieldlist end (e.g., record name: char; age: integer end), allowing aggregation of heterogeneous data. Type declarations enable the creation of custom types using the TYPE keyword, such as color = (red, yellow, green, blue) for enumerations or vector = array 1:100 of color for derived structures, promoting while hiding implementation details when exported from modules. Variable declarations follow with identlist: type, associating identifiers with specific types (e.g., i, j: [integer](/page/Integer)). This system supports Modula's goal of static typing, where type compatibility is checked at to prevent errors in modular compositions. Control flow in Modula relies on familiar structured constructs inherited from Pascal but with dotted delimiters, avoiding unstructured jumps like GOTO for reliability in multiprogramming environments. The IF statement supports conditional execution with syntax if expression .then statementsequence {elsif expression .then statementsequence} [else statementsequence] end, allowing multi-way branching (e.g., if x > 0 .then write(x) elsif x < 0 .then write(-x) else write(0) end). Loops include WHILE for pre-tested repetition (while expression .do statementsequence end), REPEAT for post-tested execution (repeat statementsequence .until expression), and LOOP for general iteration with conditional exits (loop statementsequence {exit expression [.then statementsequence]} end), providing flexible control without infinite loops unless explicitly designed. The CASE statement handles multi-way selection on ordinal types: case expression .of caselabel: do statementsequence end {; caselabel: do statementsequence end} end, where caselabels can be constants or ranges (e.g., case day .of 1: do write("monday") end; 2..6: do write("weekday") end; 7: do write("sunday") end end). Procedures and functions form the core of Modula's procedural , declared within modules as procedure ident [(formalparameters)] [: returntype]; uselist; [block](/page/Block) end ident, where the contains local declarations and statements. passing distinguishes parameters (by , read-only) from parameters (by , using VAR, modifiable). For example, a simple increment might be:
[procedure](/page/Procedure) inc(var x: [integer](/page/Integer));
begin x := x + 1 end inc;
Called as inc(i), this modifies i via . Functions return s by assigning to their identifier (e.g., procedure square(x: [integer](/page/Integer)): [integer](/page/Integer); begin square := x * x end square;), invoked as result := square(5). These mechanisms ensure controlled , aligning with Modula's emphasis on without advanced features like exceptions.

Implementations and Availability

Historical Compilers

The original implementation of Modula was developed by and his team at , with the first completed in 1977 by K. van Le. This seven-pass targeted the PDP-11 running under the RT-11 operating system, utilizing a 64 KB memory limit and 2 MB disk for intermediate code storage; it became operational in early 1978 and served as a proof-of-concept for the language's features on resource-constrained hardware. A notable early academic implementation came from the , where researchers including J. Welsh developed a Modula written in . This ran on the PDP-11/40 under the RSX-11D operating system and emphasized practical testing of Modula's system for separate compilation and process synchronization in multiprogramming environments; it supported the PDP-11 family as its primary target platform and highlighted the language's suitability for through hands-on experience with coroutine-based concurrency. Philips Laboratories produced PL Modula, a specialized introduced in 1980 that generated native for the LSI-11 , a compact PDP-11 derivative. Implemented in Pascal and operating under the UCSD p-system, it featured two main components: a translator producing P-code intermediates and a dedicated for LSI-11 ; key extensions included a mechanism for processes to support scheduling, structured constants for efficient data initialization, and records to enhance flexibility in data handling for applications. During the 1980s, several minor academic efforts in further explored Modula implementations, often as research vehicles for systems and programming. For instance, assessments at institutions like the evaluated Modula's efficacy for dedicated systems on minicomputers, while broader adoption in universities tested variants on platforms such as the PDP-11 and early workstations, focusing on concurrency and without widespread commercial deployment. The absence of a formal language standard for Modula resulted in implementation variants, such as PL Modula's deviations from Wirth's original definition, which introduced platform-specific extensions and hindered portability across compilers; this lack of standardization contributed to the language's short lifespan, as efforts shifted toward by the early 1980s.

Modern Status

Modula lacks mainstream commercial support as of November 2025, with no active vendors providing production-ready tools or integrations for modern ecosystems. The language is widely regarded as obsolete for contemporary applications, having been superseded by successors like and . As of November 2025, there are no native modern compilers or interpreters for the original Modula. Availability is limited to historical preservation through emulation. PDP-11 emulators, such as SIMH, can execute early Modula systems and code on contemporary hardware like Linux, macOS, and Windows, provided the original binaries or compiler sources are obtained from archives. These emulators recreate the RT-11 or RSX-11D environments, allowing study of Modula's multiprogramming features in their original context. Recent projects are scarce and focused on archival rather than innovation, with community interest confined to retrocomputing enthusiasts. Barriers to broader access include the rarity of original artifacts and lack of an active development community, preventing integration into modern IDEs or easy experimentation.

Legacy

Successors and Variants

Modula-2, introduced by Niklaus Wirth in 1979, served as the primary successor to the original Modula language, addressing its predecessor's limitations in implementation and portability while expanding support for concurrent and low-level programming. The original Modula, designed primarily for modular multiprogramming on dedicated systems, faced challenges in broader adoption due to its specialized focus and incomplete feature set for general systems programming, prompting Wirth to revise it for wider applicability. Modula-2 retained the core module concept from Modula for structured decomposition but added key enhancements, including coroutines, processes, signals, and monitors to facilitate reliable concurrency, alongside low-level facilities like absolute addressing and variant records for systems-level control. These changes enabled separate compilation across modules and made Modula-2 suitable for operating systems and embedded applications, leading to numerous implementations on platforms ranging from personal computers to mainframes during the 1980s. Building on , emerged in 1988 as an object-oriented evolution developed collaboratively by researchers at Research Laboratory and Digital Equipment Corporation's Systems Research Center. This variant introduced , interfaces, generics, and to support large-scale , while maintaining strong typing and modular separation to mitigate the complexity issues observed in languages like C++. 's design emphasized safety and abstraction, with features like lightweight threads and garbage collection, and it was implemented in production environments, including DEC's environment, though adoption remained niche compared to Modula-2. Among other variants, Alma-0 represents an experimental derivative, extending a subset of with elements inspired by logic languages to blend imperative and constraint-based paradigms. Developed in the late 1990s by Krzysztof Apt and colleagues at CWI , Alma-0 added constructs like nondeterministic choice (ORELSE) and (COMMIT) without altering Modula-2's core syntax, enabling solutions to problems such as search and optimization in a more concise manner. While not widely adopted, it demonstrated how Modula's foundational structure could support hybrid programming models, with a released for purposes.

Influence on Other Languages

Modula-2's innovative system, featuring separate definition and implementation modules with explicit export controls for and visibility management, exerted a lasting impact on paradigms in subsequent languages. This design facilitated safe, scalable systems development by enforcing clear boundaries between components, influencing how later languages structured code organization and compilation. Oberon, developed by in 1987 as an evolution of , directly adopted and refined this concept, integrating it with type extension mechanisms to support while eliminating unnecessary complexity from . The Go programming language further exemplifies this influence through its package system, which treats packages as self-contained units with capitalized exports for visibility, akin to Modula-2's declarations that distinguish from implementation details. Go's official documentation acknowledges "significant input from the Pascal/Modula/ family" specifically for declarations and packages, enabling modular composition without global pollution. For instance, Go's import model requires explicit qualification of exported identifiers, mirroring Modula-2's approach to prevent unintended access and promote maintainable code in large-scale systems. Additionally, Go's use of embedded in compiled packages for resolution parallels Modula-2's separate strategies, which store type information to avoid redundant recompilations. Beyond direct adoptions, Modula-2 contributed to by demonstrating how modular structures could support low-level operations like coroutines, laying groundwork for safer concurrent designs in the 1980s and 1990s. Niklaus Wirth's languages, including , profoundly shaped education, particularly at where they were integral to curricula emphasizing structured and . Modula-2 served as a tool for teaching advanced , allowing students to explore system-level design with built-in safeguards against common errors. This pedagogical approach extended globally, influencing university programs that prioritized clarity, modularity, and reliability in introductory and systems courses during the late 20th century. In summary, paved the way for a generation of modular, type-safe systems languages from the through the , embedding principles of and encapsulation that enhanced software reliability and across diverse applications.

References

  1. [1]
    Modula: A language for modular multiprogramming - Wirth - 1977
    Modula: A language for modular multiprogramming. N. Wirth,. N. Wirth. Institut für Informatik, Eidgenössische Technische Hochschule, Zürich, Switzerland.
  2. [2]
    Experience with the Programming Language MODULA
    The new programming language MODULA has been designed by Wirth for the programming of dedicated small computers used in the real-time environment.
  3. [3]
    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- ...
  4. [4]
    [DOC] The History of Modula-2 and Oberon - Ethz
    There, on the personal workstation Alto, I encountered the language Mesa, which appeared to be the appropriate language for programming large systems.<|control11|><|separator|>
  5. [5]
    [PDF] MODULA: A language for modular multiprogramming
    Programming languages: what to demand and how to assess them and. Professor Cleverbyte's visit to heaven. MODULA: A language for modular multiprogramming.
  6. [6]
    History of Modula and Lilith - Pascal for small machines
    A Brief History of Modula and Lilith. N. Wirth. Abstract In the years 1978-1980 the workstation Lilith was developed at ETH Zurich.
  7. [7]
    Experience with the programming language MODULA - ScienceDirect
    Abstract. The new programming language MODULA has been designed by Wirth for the programming of dedicated small computers used in the real-time environment.Missing: authors | Show results with:authors
  8. [8]
    An assessment of modula - Holden - 1980 - Wiley Online Library
    Wirth has recently published a new programming language called Modula which he suggests is suitable for the programming of process control systems, ...Missing: initial | Show results with:initial<|control11|><|separator|>
  9. [9]
    A new modula compiler for the LSI-11 | ACM SIGPLAN Notices
    The compiler generates code for the LSI-11 microprocessor. It is written in Pascal and operates under control of the U.C.S.D. system. Philips Laboratories ...
  10. [10]
    A critique of modula
    A critique of MODULA, the earlier of the two languages, is presented ... The first two requirements are s direct result of MODULA's intended role ...
  11. [11]
    [PDF] The Programming Language Pascal - MOORE/CAD
    Niklaus Wirth. The Programming. Language Pascal. November 1970. 1. Page 2. Niklaus Wirth. The Programming. Language Pascal. Abstract. A programming language ...
  12. [12]
    Modula: A language for modular multiprogramming
    Jul 30, 2025 · Modula: a Language for Modular Multiprogramming. N. WIRTH. Institut fur Informatik, Eidgenkische Technische Hochschule, Zurich, Switzerland.
  13. [13]
    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 ... Introduction. Niklaus Wirth.<|control11|><|separator|>
  14. [14]
    A Brief History of Modula and Lilith
    13. N. Wirth. Modula: A Language for Modular Multiprogramming. Software - Practice and Experience, 7 (1977), 3-35. 14.<|control11|><|separator|>
  15. [15]
    What happened to MODULA-2? - Retrocomputing Stack Exchange
    Sep 4, 2021 · Looking at Niklaus Wirth himself, Modula-2 is only one small step in the evolution of what is sometimes called the "Wirthian languages": Algol W ...
  16. [16]
    Modula-2 Language Frontend Merged Into GCC 13 - Phoronix
    Dec 14, 2022 · So should you be interested in Modula-2 language support, it will be found in the GCC 13 compiler release due for release in March~April of next ...
  17. [17]
    GCC 13 Release Series — Changes, New Features, and Fixes
    Sep 23, 2025 · Support for the language Modula-2 has been added. This includes support for the ISO/IEC 10514-1, PIM2, PIM3, PIM4 dialects together with a ...
  18. [18]
  19. [19]
    Modula-2 Software Foundation - GitHub
    Modula-2 Software Foundation. A non-profit organisation incorporated under section 501(c)(3). Pinned Loading
  20. [20]
    Emulith - Pascal for small machines
    Emulith is a functional emulation of the ETH Lilith Modula2 Medos computer. Its is programmed by Jos Dreesen, owner of one of the few remaining operational ...
  21. [21]
    Historic Lilith emulator and Modula-2 compiler from 1983 - GitHub
    A Modula-2 compiler for the Lilith architecture running on a Lilith emulator on a Perkin-Elmer 3220 machine running UNIX Edition 7.
  22. [22]
    Just a playground for the GCC GNU Modula-2 frontend - GitHub
    This is my playground for the GNU Modula-2 GCC frontend introduced in GCC 13. This code is written against GCC 14 snapshot 20240421 and up.
  23. [23]
  24. [24]
    Free Modula-2 Pages: Home
    This repository gathers Modula-2 code examples coming from various websites and books. It also includes several batch files for experimenting with Modula-2 on ...
  25. [25]
    [PDF] Modula-2
    Feb 22, 2013 · In this short report the programming language Modula-2 will be presented by dis- cussing its history and present, its creator Niklaus Wirth, ...
  26. [26]
    [PDF] Modula-3 Report (revised) - Luca Cardelli
    The Modula-3 report was published by Olivetti and Digital in August 1988. Imple- mentation efforts followed shortly at both companies. In January 1989, the ...Missing: history | Show results with:history
  27. [27]
    The Modula–3 type system - ACM Digital Library
    This paper presents an overview of the programming language Modula-3, and a more detailed description of its type system. Formats available. You can view the ...Missing: Corporation | Show results with:Corporation
  28. [28]
    Modula-3: Introduction - Purdue Computer Science
    Modula-3 supports interfaces, objects, generics, lightweight threads of control, the isolation of unsafe code, garbage collection, exceptions, and subtyping.
  29. [29]
    Alma-O: an imperative language that supports declarative ...
    Annotated algebraic specification of the syntax and semantics of the programming language Alma-0. ... Programming in Modula-P, 3rd ed. Springer-Verlag, New ...
  30. [30]
    [PDF] Alma-0: An Imperative language that Supports Declarative ...
    In this article we described Alma-0 by discussing the extensions of Modula-2 that are included in it. We successively introduced the following nine extensions:.
  31. [31]
    Modula-2 and Oberon - ResearchGate
    Niklaus Wirth. This paper gives an account of some design decisions made during the development of the programming language Modula. It explains the essential ...
  32. [32]
    Frequently Asked Questions (FAQ) - The Go Programming Language
    ### Summary of Influences on Go from Modula or Wirth Languages
  33. [33]
    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 ...
  34. [34]
    (PDF) Niklaus Wirth - a Pioneer of Computer Science. - ResearchGate
    Niklaus Wirth is one of the most influential scientists of the early computer age. His ideas and especially his programming languages have shaped gen- ...Missing: discontinuation | Show results with:discontinuation