Modula-2: Difference between revisions

Content deleted Content added
Current compilers: Add ObjModula2
GreenC bot (talk | contribs)
 
(364 intermediate revisions by more than 100 users not shown)
Line 1:
{{Short description|1970s-80s computer programming language}}
{{Unreferenced|date=June 2009}}
{{ExternalUse linksdmy dates|date=JuneOctober 20092020}}
{{Infobox programming language
| name = Modula-2
| logo =
| paradigmparadigms = [[Imperative = programming|imperative]], [[Structured programming|structured]], [[Modular programming|modular]], [[Information hiding|data and methodprocedure hiding]], [[Concurrent computing|concurrent]]
| yearreleased = {{Start date and = age|1978 }}
| designer family = [[Niklaus Wirth|Wirth]]/[[Modula]]
| designer = [[Niklaus Wirth]]
| developer =
| typing = [[Static type|Static]], [[Strong and weak typing|strong]], [[Type system#Type safety and memory safety|safe]]
| latest release version =
| scope = [[Scope (computer science)|Lexical]] (static)
| latest release date =
| platform = [[Lilith (computer)|Lilith]] ([[Advanced Micro Devices|AMD]] [[AMD Am2900|2901]])
| typing = strong, static
| operating system = [[Cross-platform]]
| dialects = PIM2, PIM3, PIM4, ISO
| license =
| implementations = [http://www.sysecol.ethz.ch/RAMSES/MacMETH.html ETH Zurich] (originally written by [[Niklaus Wirth]]), [http://www.plas.fit.qut.edu.au/gpm/Default.aspx Gardens Point], [http://www.awiedemann.de/compiler/ p1],
| file ext = .mod, .m2, .def, .MOD, .DEF, .mi, .md
[http://www.excelsior-usa.com/xdsx86.html Native XDS-x86], [http://www.nongnu.org/gm2/index.html gm2] (GNU Modula-2)
| website = {{URL|www.modula2.org}}
| influenced_by = [[Pascal (programming language)|Pascal]], [[Mesa programming language|Mesa]], [[ALGOL]], [[Simula|Simula-67]]
| implementations = [https://www.sysecol2.ethz.ch/RAMSES/MacMETH.html ETH compiler] written by Niklaus Wirth<br/>[https://www.nongnu.org/gm2/homepage.html GNU Modula-2]<br/>[https://www.modula2.org/ ADW Modula-2]
| influenced = [[Modula-3]], [[Oberon (programming language)|Oberon]], [[Ada (programming language)|Ada]], [[Fortran (programming language)|Fortran 90]], [[Lua (programming language)|Lua]], [[Zonnon]], Modula-GM
| dialects = PIM2, PIM3, PIM4, ISO
| operating_system =
| influenced by = [[Modula]], [[Mesa (programming language)|Mesa]], [[Pascal (programming language)|Pascal]], [[ALGOL W]], [[Euclid (programming language)|Euclid]]
| license =
| influenced = [[Modula-2+]], [[Modula-3]], [[Oberon (programming language)|Oberon]], [[Ada (programming language)|Ada]], [[Fortran 90]], [[Lua (programming language)|Lua]], [[Seed7]], [[Zonnon]], Modula-GM
| website =
}}
 
'''Modula-2''' is a structured, procedural [[programming language]] developed between 1977 and 1985/8 by [[Niklaus Wirth]] at [[ETH Zurich]]. It was created as the language for the [[operating system]] and [[application software]] of the [[Lilith (computer)|Lilith]] personal [[workstation]].<ref>{{Cite web |url=https://www.inf.ethz.ch/personal/wirth/projects.html |title=Summary of Projects by N. Wirth, 1962–1999 |author=<!-- Unstated --> |date=<!-- Undated --> |website=Department of Computer Science |publisher=[[ETH Zurich]]}}</ref> It was later used for programming outside the context of the [[Lilith (computer)|Lilith]].
'''Modula-2''' is a computer [[programming language]] invented by [[Niklaus Wirth]] at [[ETH]], around 1978, as a successor to his intermediate language [[Modula]]. Modula-2 was implemented in 1980 for the [[Lilith (computer)|Lilith]] computer, which was commercialized in 1982 by startup company DISER (Data Image Sound Processor and Emitter Receiver System) as MC1 and MC2. DISER sold 120 units worldwide. The Modula-2 language was understood by [[Niklaus Wirth]] as a successor to his programming language [[Pascal (programming language)|Pascal]]. The language design was also influenced by the [[Mesa programming language]] and the new programming possibilities of the early personal computer [[Xerox Alto]], both from Xerox, that Wirth saw during his 1976 [[sabbatical year]] at [[Xerox PARC]]<ref>N.Wirth, Programming in Modula-2, fourth Edition, page 4.</ref>.
 
Wirth viewed Modula-2 as a successor to his earlier programming languages [[Pascal (programming language)|Pascal]] and [[Modula]].<ref>{{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |chapter=Pascal and its Successors |date=2002 |editor1-last=Broy |editor1-first=Manfred |editor2-last=Denert |editor2-first=Ernst |title=Software Pioneers: Contributions to Software Engineering |___location=Berlin, Heidelberg |publisher=[[Springer-Verlag]] |pages=108–120 |doi=10.1007/978-3-642-59412-0 |isbn=978-3-642-59412-0 |s2cid=2698265}}</ref><ref>{{cite magazine |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |date=18 February 2005 |title=History and Goals of Modula-2 |url=https://www.drdobbs.com/open-source/history-and-goals-of-modula-2/223000094 |magazine=[[Dr. Dobb's Journal]] |publisher=Informa PLC}}</ref> The main concepts are:
==Description==
Modula-2 is a general purpose [[procedural language]], sufficiently flexible to do systems programming, but with much broader application. In particular, it was designed to support separate compilation and data abstraction in a straightforward way. Much of the syntax is based on Wirth's earlier and better-known language, [[Pascal (programming language)|Pascal]]. Modula-2 was designed to be broadly similar to Pascal, with some elements removed and the important addition of the ''module'' concept, and direct language support for [[multiprogramming]].
 
# The [[Modular programming|module]] as a compiling unit for separate compiling
The Modula-2 ''module'' may be used to encapsulate a set of related subprograms and data structures, and restrict their visibility from other portions of the program. The module design implemented the data abstraction feature of Modula-2 in a very clean way. Modula-2 programs are composed of modules, each of which is made up of two parts: a '''definition module''', the interface portion, which contains only those parts of the subsystem that are ''exported'' (visible to other modules), and an '''implementation module''', which contains the working code that is internal to the module.
# The [[coroutine]] as the basic building block for concurrent processes
# Types and procedures that allow access to machine-specific data
 
The language design was influenced by the [[Mesa (programming language)|Mesa]] language and the [[Xerox Alto]], both from [[Xerox PARC]], that Wirth saw during his 1976 [[sabbatical]] year there.<ref name="PIM">{{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |title=Programming in Modula-2 |year=1988 |___location=Berlin, Heidelberg |publisher=Springer |edition=4th |isbn=978-3-642-83565-0 |doi=10.1007/978-3-642-83565-0 |s2cid=41899609}} Page 4.</ref> The computer magazine ''[[Byte (magazine)|Byte]]'' devoted the August 1984 issue to the language and its surrounding environment.<ref>{{cite magazine |last1=Wirth |first1=Niklaus |author1-link=Niklaus Wirth |last2=Gutknecht |first2=Jürg |author2-link=Jürg Gutknecht |last3=Ohran |first3=Richard |last4=Paul |first4=Robert J. |last5=Coar |first5=David<!-- Do not link to US Judge --> |date=August 1984 |title=Theme: Modula-2 |magazine=[[Byte (magazine)|Byte: The Small Systems Journal]] |volume=9 |number=8 |pages=143–232 |url=https://archive.org/details/byte-magazine-1984-08}} Available at Archive.org</ref>
The language has strict scope control. In particular the scope of a module can be considered as an impenetrable wall: Except for standard identifiers no object from the outer world is visible inside a module unless explicitly imported; no internal module object is visible from the outside unless explicitly exported.
 
Wirth created the [[Oberon (programming language)|Oberon]] series of languages as the successor to Modula-2, while others (particularly at [[Digital Equipment Corporation]] and [[Acorn Computers]], later [[Olivetti]]) developed Modula-2 into [[Modula-2+]] and later [[Modula-3]].
Suppose module M1 exports objects a, b, c, and P by enumerating its identifiers in an explicit export list
 
== Description ==
Modula-2 is a general purpose [[procedural language]] suitable for both [[systems programming]] and applications programming. The syntax is based on Wirth's earlier language, [[Pascal (programming language)|Pascal]], with some elements and syntactic ambiguities removed. The ''module'' concept, designed to support separate compilation and data abstraction; and direct language support for [[multiprogramming]] were added.
 
The language allows the use of [[one-pass compiler]]s. Such a [[compiler]] by Gutknecht and Wirth was about four times faster than earlier [[multi-pass compiler]]s.<ref>{{cite web |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |date=1 May 1984 |title=A Single-pass Modula-2 Compiler for Lilith |url=https://www.astrobe.com/Modula2/M2SinglePass.pdf |website=CFB Software |access-date=23 November 2023}}</ref>
 
Here is an example of the source code for the "Hello world" program:
 
<syntaxhighlight lang="modula2">
MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
WriteString("Hello World!")
END Hello.
</syntaxhighlight>
 
A Modula-2 ''module'' may be used to encapsulate a set of related subprograms and data structures, and restrict their visibility from other parts of the program.<ref name="FOLDOC">{{FOLDOC|Modula-2}}</ref> Modula-2 programs are composed of modules, each of which is made up of two parts: a ''definition module'', the interface portion, which contains only those parts of the subsystem that are ''exported'' (visible to other modules), and an ''implementation module'', which contains the working code that is internal to the module.
 
The language has strict [[Scope (computer science)|scope]] control. Except for standard identifiers, no [[Object (computer science)|object]] from the outside is visible inside a module unless explicitly imported; no internal module object is visible from the outside unless explicitly exported.
 
Suppose module M1 exports objects a, b, c, and P by enumerating its identifiers in an explicit export list
 
<syntaxhighlight lang="modula2">
DEFINITION MODULE M1;
EXPORT QUALIFIED a, b, c, P;
...
</syntaxhighlight>
 
Then the objects a, b, c, and P from module M1 become noware known outside module M1 as M1.a, M1.b, M1.c, and M1.P. They are exported in a ''qualified'' manner to the universeoutside (assumedassuming module M1 is global). The exporting module's name, i.e. M1, is used as a qualifier followed by the object's name.
 
Suppose module M2 contains the following IMPORT declaration
 
<syntaxhighlight lang="modula2">
MODULE M2;
IMPORT M1;
...
</syntaxhighlight>
 
Then this means that the objects exported by module M1 to the universeoutside of its enclosing program can now be used inside module M2. They are referenced in a ''qualified'' manner like this: M1.a, M1.b, M1.c, and M1.P. Example:
 
<syntaxhighlight lang="modula2">
...
M1.a := 0;
M1.c := M1.P (M1.a + M1.b);
...
</syntaxhighlight>
 
Qualified export avoids name clashes:. For instanceexample, if another module M3 would also exportexports an object called P, then wethe cantwo stillobjects distinguishcan thebe two objects,distinguished since M1.P differs from M3.P. Thanks to the qualified export itIt does not matter that both objects are called P inside their exporting modules M1 and M3.
 
There is anAn alternative technique available, which is in wide use by Modula-2method programmersexists. Suppose module M4 is formulated as this:
 
<syntaxhighlight lang="modula2">
MODULE M4;
FROM M1 IMPORT a, b, c, P;
</syntaxhighlight>
 
Then thisThis means that objects exported by module M1 to the universeoutside can again be used inside module M4, but now by mere references to the exported identifiers in an "''unqualified"'' manner like thisas: a, b, c, and P. Example:
 
<syntaxhighlight lang="modula2">
...
a := 0;
c := P (a + b);
...
</syntaxhighlight>
 
This techniquemethod of unqualifying import allowsis useusable ofif there are no name clashes. It allows variables and other objects to be used outside their exporting module in exactly the same simple, i.e. ''unqualified'', manner as inside the exporting module. The walls surrounding all modules have now become irrelevant for all those objects for which this has been explicitly allowed. Of course unqualifying import is only usable if there are no name clashes.
 
TheseThe export and import rules may seem unnecessarily restrictive and verbose. But they do not only safeguard objects against unwanted access, but also haveallow the pleasant side-effect of providing automatica cross-referencingreference of the definition of every identifier in a program: ifto the identifier is qualified by a module name, then the definition comes from that module. Otherwise if it occurs unqualified, simply search backwards, and you will either encounter a declaration of that identifier, or its occurrence in an IMPORT statement which names the module it comesbe fromcreated. This property becomeshelps verywith usefulthe whenmaintenance trying to understandof large programs containing many modules.
 
The language provides for (limited) single-processor concurrency ([[monitor (synchronization)|monitors]], [[coroutine]]s and explicit transfer of control) and for hardware access (absolute addresses, bit manipulation, and [[interrupt]]s). It uses a [[namenominal type equivalencesystem]].
 
== Dialects ==
There are two major dialects of Modula-2. The first is ''PIM'', named for the book ''Programming in Modula-2'' by Niklaus Wirth.<ref name="PIM"/> There were three major editions of PIM: the second, third (corrected), and fourth. Each describes slight variants of the language. The second major dialect is ''ISO'', named for the standardization effort by the [[International Organization for Standardization]]. Here are a few of the differences among them.
There are two major dialects of Modula-2. The first is '''PIM''', named after the book
* ''PIM2'' (1983)
"Programming in Modula-2" by [[Niklaus Wirth]]. There were three major editions of PIM,
** Required explicit <code>EXPORT</code> clause in definition modules.
the second, third (corrected) and fourth editions, each describing slight variants of the
** Function <code>SIZE</code> needs to be imported from module <code>SYSTEM</code>
language. The second major dialect is '''ISO''', from the standardization effort by the
* ''PIM3'' (1985)
[[International Organization for Standardization]].
** Removed the <code>EXPORT</code> clause from definition modules following the observation that everything within a definition module defines the interface to that module, hence the <code>EXPORT</code> clause was redundant.
** Function <code>SIZE</code> is pervasive (visible in any scope without import)
* ''PIM4'' (1988)
** Specified the behaviour of the <code>MOD</code> operator when the operands are negative.
** Required all <code>ARRAY OF CHAR</code> strings to be terminated by ASCII NUL, even if the string fits exactly into its array.
* ''ISO'' (1996, 1998)
** ISO Modula-2 resolved most of the ambiguities in PIM Modula-2. It added the data types <code>COMPLEX</code> and <code>LONGCOMPLEX</code>, exceptions, module termination (<code>FINALLY</code> clause) and a complete standard [[input/output]] (I/O) [[Library (computing)|library]]. There are many minor differences and clarifications.<ref>ISO/IEC 10514-1:1996</ref>
 
== Supersets ==
* '''PIM2''' (1983)
There are several supersets of Modula-2 with language extensions for specific application domains:
** Required explicit '''EXPORT''' clause in definition modules.
* '''PIM3PIM supersets''' (1985)
** [https://web.archive.org/web/20010809233821/http://www.mhccorp.com/modula-2.html Canterbury Modula-2], extended with Oberon-like extensible records [This has been withdrawn and is no longer available anywhere]
** Removed the '''EXPORT''' clause from definition modules following the observation that everything within a definition module defines the interface to that module, hence the '''EXPORT''' clause was redundant.
** [[Modula-2+]], extended with preemptive threads and exceptions
* '''PIM4''' (1989)
** [https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.7784 Modula-2*], parallel extension<ref>Tichy et al., Modula-2*: An Extension for Modula-2 for highly parallel portable programs, [[University of Karlsruhe]] [1990]</ref>
** Specified the behaviour of the '''MOD''' and '''REM''' operators when their operands are negative and mandated "ARRAY OF CHAR" to always be ASCII-NUL terminated.
** [https://robotics.ee.uwa.edu.au/modula-p/ Modula-P], another parallel extension<ref>Bräunl, Parallel Programming, Prentice-Hall [1993]</ref>
* '''ISO''' (1996)
** Modula–Prolog, adds a [[Prolog]] layer<ref>{{Cite journal |last1=Muller |first1=C. |date=November 1986 |title=Modula–Prolog: A Software Development |journal=IEEE Software |volume=3 |issue=6 |pages=39–45} |doi=10.1109/MS.1986.229475 |s2cid=763425}}</ref>
** ISO Modula-2 resolved most of the ambiguities in PIM Modula-2. It added the data types '''COMPLEX''' and '''LONGCOMPLEX''', exceptions, module termination ('''FINALLY''' clause) and a complete standard I/O library. There are numerous minor differences and clarifications.
** Modula/R, adds [[relational database]] extensions
** Modula-GM, adds [[embedded system]] extensions
* '''ISO supersets'''
** ISO10514-2, adds an [[object-oriented programming]] layer<ref name="freepages.modula2.org">[https://freepages.modula2.org/m2faq.html modula2.org, 5. Where can I get information about ISO Modula-2?]</ref>
** ISO10514-3, adds a [[generic programming]] (generics) layer<ref name="freepages.modula2.org"/>
* '''IEC supersets'''
** [https://web.archive.org/web/20081021043956/http://www.designtools.co.nz/mod51.htm Mod51], extended with [[IEC 1131]] constructs for embedded development
 
== Derivatives ==
There are several derivative languages that resemble Modula-2 very closely but are new languages in their own right. Most are different languages with different purposes and with strengths and weaknesses of their own:
* [[Modula-3]], developed by a team of ex-Xerox employees who had moved to DEC and Olivetti<ref>Cardelli et al., ''Modula-3 Report'', Research Report 31, Systems Research Center, Digital Equipment Corporation, [1988]</ref>
* [[Oberon (programming language)|Oberon]], developed at [[ETH Zurich]] Zürich for [[Oberon operating system|System Oberon]]<ref>N. Wirth & J. Gutknecht, Project Oberon: the design of an operating system and compiler, {{ISBN|0-201-54428-8}}, [[Addison-Wesley]] [1992]</ref> [https://inf.ethz.ch/personal/wirth/ProjectOberon1992.pdf available online].
* [[Oberon-2]], Oberon with object-oriented (OO) extensions<ref>Moessenboeck & Wirth, ''The Programming Language Oberon-2'', ETH Zurich [1995]</ref>
* [[Active Oberon]], another OO [[Oberon (programming language)|Oberon]] extension, developed at [[ETH Zurich]] with the main goal to support [[parallel computing]] programming on [[multiprocessing]] and [[multi-core processor]]s
* Parallaxis, a language for machine-independent data-parallel programming<ref>Thomas Bräunl, Parallaxis, a Language for Structured Data-parallel Programming, [[University of Stuttgart]] [1996]</ref>
* Umbriel, developed by Pat Terry as a teaching language<ref>Pat D. Terry, Another Minimal Programming Language, ACM SIGPLAN Notices No. 30 [1995]</ref>
* YAFL, a research language by Darius Blasband<ref>D. Blasband, The YAFL Programming Language, Second Edition, [1993]</ref>
 
Many other current programming languages have adopted features of Modula-2.
 
== Language elements ==
 
=== Reserved words ===
PIM [2,3,4] defines 40 [[reserved word]]s:
 
PIM3 contained the following 40 reserved words:
 
<pre>
Line 101 ⟶ 163:
</pre>
 
=== RelatedBuilt-in languagesidentifiers ===
PIM [3,4] defines 29 built-in [[identifier]]s:
Although Modula-2 is by far the best-known and most widely used variant, there are several languages which are related in one way or another: the original, and quite different, Modula (intended for systems implementation), [[Modula-2+]], Modula-2* (parallel extension), ISO Modula-2's OO and generic extensions, [http://objective.modula2.net/ Objective Modula-2] (extended with Smalltalk-like object oriented constructs, similar to how [[Objective C]] extends C), [[Modula-3]] (by DEC and Olivetti; adding garbage collection, objects, and generics), [[Oberon (programming language)|Oberon]] (another, later, Wirth design), [[Oberon (programming language)|Oberon-2]] (Oberon with OO extensions), and a number of others. These should not be regarded as "better versions" or "replacements" for Modula-2; most are different languages with different purposes, and with strengths and weaknesses of their own.
 
<pre>
Modula-2 was developed as the system language for the [[Lilith (computer)|Lilith]] workstation, and formed the ancestor for the [[Oberon (programming language)|Oberon]] language and workstation project ([[Oberon operating system|System Oberon]]) developed at [[ETH]] Zürich. Many current programming languages have adopted features of Modula-2.
ABS EXCL LONGINT REAL
BITSET FALSE LONGREAL SIZE
BOOLEAN FLOAT MAX TRUE
CAP HALT MIN TRUNC
CARDINAL HIGH NIL VAL
CHAR INC ODD
CHR INCL ORD
DEC INTEGER PROC
</pre>
 
== Embedded system use ==
Modula-2 is used to program many [[embedded system]]s.
 
=== Cambridge Modula-2 ===
Cambridge Modula-2 by Cambridge Microprocessor Systems is based on a subset of PIM4 with language extensions for embedded development. The compiler runs on [[DOS]] and it generates code for [[Motorola 68000 series]] (M68k) based embedded microcontrollers running a MINOS operating system.
 
=== Mod51 ===
Mod51 by Mandeno Granville Electronics is based on ISO Modula-2 with language extensions for embedded development following [[IEC 1131]], an industry standard for [[programmable logic controller]]s (PLC) closely related to Modula-2. The Mod51 compiler generates standalone code for 80C51 based microcontrollers.
 
=== Modula-GM ===
[[Delco Electronics]], then a subsidiary of GM [[Hughes Electronics]], developed a version of Modula-2 for embedded control systems starting in 1985. Delco named it Modula-GM. It was the first [[high-level programming language]] used to replace [[machine code]] (language) for embedded systems in Delco's ''engine control units'' (ECUs). This was significant because Delco was producing over 28,000 ECUs per day in 1988 for GM. This was then the world's largest producer of ECUs.<ref>Delco Electronics Electron Magazine, The Atwood Legacy, Spring '89, page 25</ref> The first experimental use of Modula-GM in an [[embedded controller]] was in the 1985 Antilock Braking System Controller which was based on the Motorola 68xxx microprocessor, and in 1993 Gen-4 ECU used by the [[Champ Car World Series]] Championship Auto Racing Teams (CART) and [[Indy Racing League]] (IRL) teams.<ref>[[Development of electronics for GM auto racing]]</ref> The first production use of Modula-GM was its use in GM trucks starting with the 1990 model year ''vehicle control module'' (VCM) used to manage GM Powertrain's [[Vortec]] engines. Modula-GM was also used on all ECUs for GM's 90° [[Buick V6 engine]] family 3800 Series II used in the 1997-2005 model year [[Buick Park Avenue]]. The Modula-GM compilers and associated software management tools were sourced by Delco from [[Intermetrics]].
 
Modula-2 was selected as the basis for Delco's high level language because of its many strengths over other alternative language choices in 1986. After Delco Electronics was spun off from GM (with other component divisions) to form [[Aptiv|Delphi Automotive Systems]] in 1995, global sourcing required that a non-proprietary high-level software language be used. ECU embedded software now developed at Delphi is compiled with commercial compilers for the language [[C (programming language)|C]].
 
=== Russian radionavigation satellites ===
The satellites of the Russian [[radionavigation-satellite service]] framework [[GLONASS]], similar to the United States [[Global Positioning System]] (GPS), are programmed in Modula-2.<ref>{{Cite web |last=Koltashev |first=A. A. |date=2006 |title=Modula-2 in Russian Space |url=http://www.kronos.ru/about/koltashev/<!-- Also at http://www.inr.ac.ru/~info21/texts/aakmodula2.htm --> |website=Kronos: History of a Project |publisher=xTech |language=ru |access-date=8 April 2021}}</ref>
 
== Compilers ==
* Amsterdam Compiler Kit (ACK) Modula-2 – for [[MINIX]]; [[freeware]]<ref>{{cite web |url=https://github.com/davidgiven/ack |title=ACK |last=Given |first=David |date=9 October 2020 |website=GitHub |access-date=13 March 2021}}</ref>
* ADW Modula-2 – for Windows, ISO compliant, ISO/IEC 10514-1, ISO/IEC 10514-2 (OO extension), ISO/IEC 10514-3 (Generic extension); freeware<ref>{{cite web |url=https://www.modula2.org/ |title=ADW Modula-2 |author=<!-- Unstated --> |date=<!-- Undated --> |website=Modula-2.org |access-date=13 March 2021}}</ref>
* Aglet Modula-2 – for [[AmigaOS]] 4.0 for [[PowerPC]]; freeware<ref>{{cite web |url=https://aglet.web.runbox.net/ |title=Aglet Modula-2 |author=<!-- Unstated --> |date=15 February 2012 |website=Aglet Modula-2 |access-date=13 March 2021}}</ref>
* Fitted Software Tools (FST) Modula-2 – for DOS; freeware<ref>{{Cite FTP |url=ftp://ftp.psg.com/pub/modula-2/fst/fst-40s.lzh |title=FST Modula-2 |last= |first= |date= |server=psg.com |url-status=dead |access-date=13 October 2021}}</ref>
* Gardens Point Modula-2 (GPM) – for BSD, Linux, OS/2, [[Oracle Solaris|Solaris]]; ISO compliant; freeware, as of 30 July 2014<ref>{{cite web |url=http://plas.fit.qut.edu.au/gpm/ |title=Gardens Point Modula |author=<!-- Unstated --> |date=29 January 2007 |website=Programming Languages and Systems Group, Faculty of Information Technology |publisher=Queensland University of Technology, Brisbane |access-date=13 March 2021 |url-status=dead |archive-url=https://web.archive.org/web/20130323002046/http://plas.fit.qut.edu.au/gpm/ |archive-date=23 March 2013}}</ref>
* Gardens Point Modula-2 (GPM/CLR) – for [[.NET Framework]]; freeware<ref>{{cite web |url=https://github.com/k-john-gough/gpmclr |title=Gardens Point Modula-2 (GPM/CLR) |author= K John Gough |date=25 October 2010 |website=GitHub |access-date=16 October 2022}}</ref>
* GNU Modula-2 – for GCC platforms, version 1.0 released 11 December 2010; compliance: PIM2, PIM3, PIM4, ISO; [[free software]], [[GNU General Public License]] (GPL)<ref>{{cite web |url=https://www.nongnu.org/gm2/ |title=GNU Modula-2 |author=<!-- Unstated --> |date=30 August 2018 |website=Savannah |publisher=Free Software Foundation |access-date=13 March 2021}}</ref>
* [[Logitech]]<ref name="jacobs1998409">{{Cite magazine |last=Jacobs |first=Chris |date=1984 |title=Turbo Pascal v2.0 |url=https://archive.org/details/Computer_Language_Issue_01_1984-09_CL_Publications_US/page/n72/mode/1up?view=theater |access-date=2025-04-06 |magazine=Computer Language |pages=71-74 |volume=1 |issue=1}}</ref> - they also had a "Real Time Kernel" for embedded usage (1987)<ref>{{cite web |title=Logitech Modula-2 |url=http://www.edm2.com/index.php/Logitech_Modula-2 |publisher=The Electronic Developer Magazine for OS/2 (EDM/2) |access-date=29 May 2022}}</ref><ref>{{cite web |title=1988: Modula-2 and Logitech RTK |date=12 April 2022 |url=https://www.teigfam.net/oyvind/home/technology/233-notes-from-the-vault-0x05/#modula-2_real_time_kernel_by_logitech |publisher=Øyvind Teig |quote=Photo of the floppy disk}}</ref>
* M2Amiga – for [[Amiga]]; [[free software]]<ref>{{cite web |url=https://m2amiga.claudio.ch/ |title=M2Amiga |last1=Degen |first1=René |last2=Nieder |first2=Claudio |last3=Preusing |first3=Bernd |last4=Schaub |first4=Markus |last5=Straube |first5=Jörg |date=2004 |website=Claudio's web site |publisher=A+L AG |access-date=13 March 2021 |url-status=live |archive-url=https://web.archive.org/web/20190120022439/https://m2amiga.claudio.ch/ |archive-date=20 January 2019}}</ref>
* M2M – by N. Wirth and collaborators from ETH Zurich, cross-platform, generates M-code for [[virtual machine]]; freeware<ref>{{cite web |url=https://www.astrobe.com/Modula2/ |title=Lilith and Modula-2 |author=<!-- Unstated --> |date=<!-- Undated --> |website=CFB Software |access-date=23 November 2023}}</ref>
* M2RT11 – by N. Wirth and collaborators from ETH Zurich, originally created for bootstrapping the [[Lilith (computer)|Lilith]]
* MacMETH – by N. Wirth and collaborators from ETH Zurich for Macintosh, Classic only; freeware<ref>{{cite web |url=https://www.sysecol2.ethz.ch/RAMSES/MacMETH.html |title=MacMETH: A Fast Modula-2 Language System for Macintosh Computers |author=<!-- Unstated --> |date=22 January 2020 |website=ETH Zurich: Terrestrial Systems Ecology |access-date=13 March 2021}}</ref>
* Mod51 – for the Intel 80x51 microcontroller family, ISO compliant, IEC1132 extensions; proprietary software<ref>{{cite web |url=http://www.designtools.co.nz/mod51.htm |title=Mod51 Structured Text Programming Language |author=<!-- Unstated --> |date=<!-- Undated --> |website=Design Tools |access-date=13 March 2021 |url-status=dead |archive-url=https://web.archive.org/web/20081021043956/http://www.designtools.co.nz/mod51.htm |archive-date=21 October 2008}}</ref>
* Megamax Modula-2 – for [[Atari ST]] with documentation; freeware<ref>{{cite web |url=https://www.tempel.org/files-e.html |last=Tempelmann |first=Thomas |title=Thomas Tempelmann's home page |date=1 September 2020 |access-date=18 March 2021}}</ref>
* Modula-2 R10 – reference compiler for this Modula; open-source, peer review<ref>{{cite web |url=https://modula-2.net/m2r10/ |title=Modula-2 R10 |access-date=13 October 2021}}</ref>
* ModulaWare – for [[OpenVMS]] ([[VAX]] and [[DEC Alpha|Alpha]]), ISO compliant; proprietary software<ref>{{cite web |url=http://www.modulaware.com/ |title=ModulAware |last=Dotzel |first=Chih-Ya |date=21 January 2020 |access-date=18 March 2021}}</ref>
* ORCA/Modula-2 – for [[Apple IIGS]] by The Byte Works for the Apple Programmer's Workshop
* p1 Modula-2 – for [[Macintosh]], [[Classic Mac OS|Classic]] and [[macOS]] ([[PowerPC]] and [[Carbon (API)]] only), ISO compliant; proprietary software<ref>{{cite web |url=https://modula2.awiedemann.de/ |title=p1 Modula-2 |last=Wiedemann |first=Albert |date=13 January 2021 |website=p1 Society for Computer Science |access-date=19 March 2021}}</ref>
* MOCKA – for various platforms, PIM compliant; commercial, freeware Linux/BSD versions<ref>{{Cite web |last1=Beck |first1=Michael |last2=Geiss |first2=Rubino |date=2006 |url=http://www.info.uni-karlsruhe.de/~modula/ |title=The Karlsruhe Modula-2 Compiler MOCKA |website=Institute for Program Structures and Data Organization (IPD) |publisher=[[Karlsruhe Institute of Technology]] |url-status=dead |archive-url=https://web.archive.org/web/20090904204227/http://www.info.uni-karlsruhe.de/~modula/index.php |archive-date=4 September 2009 |access-date=21 March 2021}}</ref>
* TDI Modula-2 – for [[Atari ST]], by TDI Software<ref name="apc198608_modula2">{{ cite magazine |url=https://archive.org/details/apc_1986_08/page/49/mode/1up |title=Modula-2 compiler |magazine=Australian Personal Computer |date=August 1986 |access-date=8 October 2022 |last1=Jefferson |first1=Gareth |pages=49, 52, 54, 56, 58}}</ref>
* Terra M2VMS – for [[OpenVMS]] ([[VAX]] and [[DEC Alpha|Alpha]]), PIM compliant; proprietary software<ref>{{Cite web |author=<!-- Unstated --> |date=12 November 2002<!--Page bottom--> |url=http://www.terraterra.ch/modula-2/spdm2vms.html |title=Modula-2 systems for OpenVMS/Alpha and OpenVMS/VAX |website=Terra Datentechnik |place=Erlenbach, Switzerland |language=en, de<!--Page bottom--> |access-date=23 March 2021}}</ref>
* m2c, Ulm Modula-2 System – for [[Oracle Solaris|Solaris]] (Sun [[SPARC]] and [[Motorola 68000 series|Motorola 68k]]); free software, [[GNU General Public License]] (GPL)<ref>{{Cite web |last1=Borchert |first1=Andreas |last2=Hasch |first2=Martin |date=21 January 2003 |url=https://www.mathematik.uni-ulm.de/modula/ |title=m2c: Ulm's Modula-2 System |website=Ulm University |place=[[Ulm]], Germany |language=en |access-date=23 March 2021}}</ref>
* XDS – ISO compliant, TopSpeed compatible library: ''Native XDS-x86'' for x86 (Windows and Linux); ''XDS-C'' for Windows and Linux (16- and 32-bit versions), targets C ([[C (programming language)#K&R C|K&R]] & [[ANSI C|ANSI]]); freeware<ref name="XDS">{{cite web |url=http://www.excelsior-usa.com/xds.html |title=XDS Family of Products: Modula-2 – Oberon-2 development tools |author=<!-- Unstated --> |date=1999–2009 |website=Excelsior LLC |url-status=dead |archive-url=https://web.archive.org/web/20090527060148/http://www.excelsior-usa.com/xds.html |archive-date=27 May 2009 |access-date=23 March 2021}}</ref>
 
===Turbo Modula-2===
{{anchor|turbo}}
Turbo Modula-2 was a compiler and an [[integrated development environment]] for [[MS-DOS]] developed, but not published, by [[Borland]]. Jensen and Partners, which included Borland cofounder Niels Jensen, bought the unreleased codebase and turned it into TopSpeed Modula-2. It was eventually sold to Clarion, now SoftVelocity, who then offered the Modula-2 compiler as part of its [[Clarion (programming language)|Clarion]] product line at that time.<ref>{{cite web |url=http://softvelocity.com/core/default.html |title=About Clarion |archive-url=https://web.archive.org/web/20021207222218/http://softvelocity.com/core/default.html |access-date=31 March 2023|archive-date=7 December 2002}}</ref>
 
A [[Zilog Z80]] [[CP/M]] version of Turbo Modula-2 was briefly marketed by Echelon under license from Borland. A companion release for [[Hitachi HD64180]] was sold by Micromint as a development tool for their SB-180 single-board computer.<ref>{{cite magazine |title=Circuit Cellar |magazine=[[Byte (magazine)|Byte: The Small Systems Journal]] |volume=11 |number=13 |page=98 |url=https://archive.org/details/byte-magazine-1986-12}}</ref>
 
===IBM Modula-GM2===
[[IBM]] had a Modula-2 compiler for internal use which ran on both [[OS/2]] and [[AIX]], and had first class support in IBM's [[E (PC DOS)|E2]] editor.<ref name="edm2">{{cite web |url=http://www.edm2.com/index.php/IBM_Modula-2 |title=IBM Modula-2 |date=2 March 2019 |website=edm2.com |access-date=2021-03-12}}</ref> IBM Modula-2 was used for parts of the [[OS/400]] ''Vertical Licensed Internal Code'' (effectively the kernel of OS/400).<ref>{{cite web |url=https://www.itjungle.com/2011/02/21/tfh022111-story06/ |title=Reader Feedback on AS/400 to i Mystery Solved |date=2011-02-21 |access-date=2021-03-12 |website=itjungle.com}}</ref> This code was mostly replaced with [[C++]] when OS/400 was ported to the [[IBM RS64]] processor family, although some remains in modern releases of the operating system.<ref name="inside-as400">{{cite book |last=Soltis |first=Frank G. |year=1997 |title=Inside the AS/400 |edition=2nd |url=https://books.google.com/books?id=5DoPAAAACAAJ |publisher=Duke Press |isbn=978-1882419661}}</ref><ref>{{cite mailing list|url=https://archive.midrange.com/mi400/200310/msg00008.html|title=Re: Re: MI emulator|author=Leif Svalgaard|date=2003-10-08|access-date=2021-02-26|mailing-list=MI400}}</ref> A [[Motorola 68000]] backend also existed, which may have been used in embedded systems products.<ref name="edm2"/>
[[Delco Electronics]], then a subsidiary of GM [[Hughes]] Electronics, developed a version of Modula-2 for embedded control systems starting in 1985. Delco named it Modula-GM. It was the first high level language used to replace machine language code for embedded systems in Delco's engine control units (ECUs). This was significant because Delco was producing over 28,000 ECUs per day in 1988 for GM; this was then the world's largest producer of ECUs<ref> Delco Electronics Electron Magazine, The Atwood Legacy, Spring '89, page 25</ref>. The first experimental use of Modula-GM in an embedded controller was in the 1993 Gen-4 ECU used by the [[CART]] (Championship Auto Racing Teams) and [[IRL]] (Indy Racing League) teams<ref>[[Development of Electronics for GM Auto Racing]]</ref>. The first production use of Modula-GM was its use in GM trucks starting with the 1990 model year VCM (Vehicle Control Module) used to manage GM Powertrain's [[Vortec]] engines. Modula-GM was also used on all ECUs for GM's [[Buick V6 engine|90° Buick V6 family]] 3800 Series II used in the 1997-2005 model year [[Buick Park Avenue]]. The Modula-GM compilers and associated software management tools were sourced by Delco from [[Intermetrics]].
 
== Operating systems ==
Modula-2 was selected as the basis for Delco's high level language because of its many strengths over other alternative language choices in 1986. After Delco Electronics was spun off from GM (with other component divisions) to form [[Delphi (auto parts)|Delphi]] in 1997, global sourcing required that a non proprietary high level software language be used. ECU embedded software now developed at Delphi use commercial C compilers.
Modula-2 is used to program some [[operating system]]s (OSs). The Modula-2 module structure and support are used directly in two related OSs.
 
The OS named ''[[Lilith (computer)#Operating system|Medos-2]]'', for the Lilith workstation, was developed at ETH Zurich, by Svend Erik Knudsen with advice from Wirth. It is a single user, [[object-oriented operating system]] built from Modula-2 modules.<ref>
== Current compilers ==
{{Cite thesis |last=Knudsen |first=Svend Erik |date=1983 |title=Medos-2: A Modula-2 Oriented Operating System for the Personal Computer Lilith |type=PhD |publisher=[[ETH Zurich]] |doi=10.3929/ethz-a-000300091|hdl=20.500.11850/137906}}<!-- also at http://e-collection.library.ethz.ch/eserv/eth:21975/eth-21975-02.pdf --></ref><ref>
* [http://www.cs.vu.nl/pub/minix/2.0.0/ack ACK] Modula-2 for Minix 2.0 ([[freeware]])
{{Cite book |last=Knudsen |first=Svend Erik |date=25 October 2000 |chapter=Medos in Retrospect |editor1-last=Böszörményi |editor1-first=László |editor2-last=Gutknecht |editor2-first=Jürg |editor2-link=Jürg Gutknecht |editor3-last=Pomberger |editor3-first=Gustav |title=The School of Niklaus Wirth: The Art of Simplicity |pages=69–86 |publisher=Morgan Kaufmann |isbn=978-1558607231}} {{ISBN|1-55860-723-4}} & dpunkt, {{ISBN|3-932588-85-1}}.</ref><ref>
* [http://http://home.ntelos.net/~tbreeden/ Aglet Modula-2] for Amiga OS 4.0/PPC ([[freeware]])
{{Cite magazine |last=Sand |first=Paul A. |date=September 1984 |title=The Lilith Personal Computer |magazine=[[Byte (magazine)|Byte]] |pages=300–311 |url=https://archive.org/details/BYTE_Vol_09-10_1984-09_Computer_Graphics/page/n309/mode/2up |access-date=6 March 2021}} Reprint.</ref>
* [http://www.cms.uk.com Cambridge Modula-2] for various micro-controllers and embedded MINOS operating system (commercial + [[proprietary software]])
* [http://www.mhccorp.com/modula-2.html Canterbury Modula-2] generates Java source code
* [http://ftp.digital.com/pub/DEC/Modula-2 DEC Modula-2] for BSD and Ultrix, both VAX and MIPS ([[freeware]])
* [ftp://ftp.psg.com/pub/modula-2/fst/fst-40s.lzh FST] Fitted Software Tools Modula-2 for MS-DOS ([[freeware]])
* [http://www.plas.fit.qut.edu.au/gpm/Default.aspx Gardens Point Modula-2] for BSD, Linux, OS/2, Solaris and [[.NET Framework|.NET]] - ISO compliant ([[freeware]])
* [http://www.nongnu.org/gm2/ GNU Modula-2 compiler] for GCC platforms, work in progress but already generates code, PIM compliant ([[free software]], [[GNU General Public License|GPLed]])
* [http://m2amiga.claudio.ch M2Amiga] for Amiga ([[free software]])
* [http://www.cfbsoftware.com/modula2 M2M] by N. Wirth and collaborators from ETH Zurich, platform independent, generates M-code for virtual machine ([[freeware]])
* [http://www.sysecol.ethz.ch/RAMSES/MacMETH.html MacMETH] by N. Wirth and collaborators from ETH Zurich for Macintosh, but Classic only ([[freeware]])
* [http://www.designtools.co.nz/mod51.htm Mod51] for the Intel 80x51 micro-controller family (commercial + [[proprietary software|proprietary]])
* [http://www.modulaware.com ModulaWare] for OpenVMS, both VAX and Alpha, ISO compliant (commercial + [[proprietary software|proprietary]])
* [ftp://ftp.psg.com/pub/modula-2/grosch/mtc.tar.Z MTC] Modula-2 to C translator, available in Modula-2 and C source ([[free software]])
* [http://www.excelsior-usa.com/xdsx86.html Native XDS-x86] for Windows and Linux, ISO compliant Modula-2 and Oberon-2 native compilers with optional TopSpeed Compatibility Pack ([[freeware]])
* [http://objective.modula2.net/compiler.shtml Objective Modula-2] compiler, cross-platform - outputs Objective-C (available for [[peer review]] and testing purposes only)
* [http://www.awiedemann.de/compiler/index.html p1 Modula-2] for Macintosh, both Classic and Mac OS X but only supported API is Carbon, ISO compliant (commercial + [[proprietary software|proprietary]])
* [http://www.info.uni-karlsruhe.de/~modula/index.php The Karlsruhe Modula-2 Compiler MOCKA] for various platforms, PIM compliant (commercial, [[freeware]] Linux/BSD versions)
* [http://www.terraterra.ch/modula-2/spdm2vms.html TERRA M2VMS] for OpenVMS, both VAX and Alpha, PIM compliant (commercial + [[proprietary software|proprietary]])
* [http://www.mathematik.uni-ulm.de/modula The Ulm Modula-2 System] for Solaris, both SPARC and MC68K (free software, [[GNU General Public License|GPLed]])
* [http://www.excelsior-usa.com/xdsc.html XDS-C] hosted on Windows and Linux, generates ANSI or K&R C source thus targeting most 16- and 32-bit platforms, ISO compliant Modula-2 and Oberon-2 with optional TopSpeed Compatibility Pack ([[freeware]])
 
The OS named ''[[Kronos (computer)#Operating system|Excelsior]]'', for the [[Kronos (computer)|Kronos]] workstation, was developed by the [[Academy of Sciences of the Soviet Union]], Siberian branch, [[Novosibirsk]] Computing Center, Modular Asynchronous Developable Systems (MARS) project, Kronos Research Group (KRG). It is a single user system based on Modula-2 modules.<ref name="Kronos-Excelsior">{{Cite web |last1=Kuznetsov |first1=D.N. |last2=Nedorya |first2=A.E. |last3=Tarasov |first3=E.V. |last4=Filippov |first4=V.E. |date=<!-- Undated --> |title=Kronos: a family of processors for high-level languages |url=http://www.kronos.ru/literature/processors |website=Kronos: History of a Project |publisher=xTech |language=ru |access-date=13 April 2021}}</ref>
== Discontinued compilers ==
* Benchmark Modula-2 for the [[Amiga]]
* [http://www.retroarchive.org/cpm/lang/turbom2.zip Borland Turbo Modula-2] for CP/M ([[abandonware]])
* Borland [[Turbo Modula-2]] for MS-DOS (sold to Jensen and Partners, became TopSpeed Modula-2)
* [http://www.sysecol.ethz.ch/SimSoftware/RAMSES/em2_2.0.6.html epc Modula-2] (from former Edinburgh Portable Compilers Limited; company no longer exists, is now a division of [http://www.analog.com/ Analog Devices])
* FTL Modula-2 (v1.15 1986) for MS-DOS, ATARI ST and CP/M Z80 by Dave Moore, Cerenkof Computing. Distributed in Australia by [http://www.jedmicro.com.au/ JED Microprocessors Pty Ltd.]
* [http://www.terraterra.ch/modula-2/index.html Logitech] had a series of Modula-2 compilers for CP/M and MS-DOS.
* [http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/web/m2fabout.html M2F] for Linux, predecessor to GNU Modula-2, generates i386 code, follows PIM2 (GPled)
* M2S for the [[Amiga]]
* M2SDS (IBM PC), Interface Technologies Inc. (ITC) Houston, TX.
* [http://www.tempel.org/files-e.html#MM2 Megamax Modula-2] for Atari ST & TT computers. German language only. Documentation and source code is now available for free, yet not very useful as much of it is written in 68k assembler code.
* [[Metrowerks]]' first products were Modula-2 compilers for various platforms, including the Macintosh
* Modula Corporation had a series of Modula-2 compilers for [[MS-DOS]] [http://cfbsoftware.com/modula2 (M2M-PC)], the [[Apple II]] and the [[Macintosh]]
* Modula-2 PC (IBM PC), PCollier Systems, Tucson, AZ.
* Mosys Modula-2 System for Sage / Stride 68000 computers. Brian Kirk, [http://www.robinsons.co.uk/ Robinson Systems Ltd. UK]
* [http://www.modula2.org/sb/websitearchive/indexw.html Stony Brook Modula-2]
* TDI Modula-2 for the [[Amiga]] and [[Atari]] ST
* TopSpeed (aka Clarion, aka JPI, aka Jensen and Partners) had several good 16-bit Modula-2 compilers, with nice productive IDEs. This was the "Turbo Pascal" of Modula-2. Slightly non standard, but very popular both in business and education, an excellent toolchain. They are currently included with Clarion now owned by [http://www.softvelocity.com/clarion/overview.htm SoftVelocity]
* Volition Systems Modula-2 (UCSD p-System). Randy Bush, Richard Gleaves, Volition Systems Del Mar, CA.
 
== Books ==
*{{cite book |last=Gleaves |first=Richard |date=1984 |title=Modula-2 for Pascal Programmers |series=Springer Books on Professional Computing |edition=1st |url=https://link.springer.com/book/10.1007%2F978-1-4613-8531-8 |___location=Switzerland |publisher=Springer Nature |doi=10.1007/978-1-4613-8531-8 |isbn=978-0-387-96051-7 |s2cid=346624}}
* K. N. King, ''Modula-2'', a comprehensive and clearly written text, continuously in print for now about two decades, ISBN 0-669-11091-4
*{{cite book |last=King |first=K. N. |date=1 January 1988 |title=Modula-2: A Complete Guide |url=http://knking.com/books/modula2/ |___location=[[Burlington, Massachusetts]] |publisher=Jones and Bartlett Publishers |isbn=978-0669110913}}
* Richard J. Sutcliffe, "[http://www.arjay.bc.ca/Modula-2/Text/index.html Modula-2: Abstractions for Data and Programming Structures]," (Using ISO-Standard Modula-2) 2004-2005 Edition
*{{cite book |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |date=1988 |title=Programming in Modula-2 |edition=4th |url=https://link.springer.com/book/10.1007/978-3-642-83565-0 |___location=[[Berlin]] [[Heidelberg]] |publisher=[[Springer-Verlag]] |doi=10.1007/978-3-642-83565-0 |isbn=978-0-387-96051-7 |s2cid=41899609}}
*{{cite book |last=Cooper |first=Doug |date=1 September 1990 |title=Oh My! Modula-2: An Introduction to Programming |___location=[[New York City]], [[New York (state)|New York]] |publisher=[[W. W. Norton & Company]] |isbn=978-0393960099}}
*{{cite book |last=Helman |first=Paul |date=1 March 1998 |title=Walls and Mirrors: Intermediate Problem Solving and Data Structures: Modula, 2 (Benjamin/Cummings Series in Structured Programming) |publisher=[[Benjamin-Cummings]] |isbn=978-0805389456}}
*{{cite book |last=Sutcliffe |first=Richard J. |date=2004–2005 |title=Modula-2: Abstractions for Data and Programming Structures |url=https://www.arjay.bc.ca/Modula-2/Text/ |publisher=Arjay Books |isbn=978-0-669-11091-3}} Uses ISO-standard Modula-2.
 
== References ==
{{Reflist}}
 
== External links ==
* [http://{{Official website|www.modula2.org/ Modula-2 Internet directory]}}
* [http://www.modulaware.com/m2wr/ The Modula-2 website ring]
* [http://www.arjay.bc.ca/Modula-2/m2faq.html Modula-2 FAQ] by Rick Sutcliffe
* [http://cfbsoftware.com/modula2 Lilith and Modula-2]
* [http://freepages.modula2.org/ Free Modula-2 Pages News Portal]
* [http://www.aha.ru/~uranus/ Sources Store for Modula-2 and Oberon-2]
 
{{FOLDOCModula, Oberon}}
{{Wirth}}
{{Authority control}}
 
[[Category:Modula programming language family]]
[[Category:Systems programming languages]]
[[Category:Programming languages created in 1978]]
 
[[Category:Programming languages with an ISO standard]]
[[bg:Modula-2]]
[[Category:Statically typed programming languages]]
[[cs:Modula-2]]
[[Category:High-level programming languages]]
[[de:Modula-2]]
[[es:Modula-2]]
[[fr:Modula-2]]
[[gl:Modula-2]]
[[it:Modula-2]]
[[hu:Modula-2]]
[[nl:Modula-2]]
[[ja:Modula-2]]
[[pl:Modula-2]]
[[pt:Modula-2]]
[[ru:Модула-2 (язык программирования)]]
[[sr:Модула-2]]
[[sv:Modula-2]]
[[tg:Модула-2]]
[[tr:Modula]]