Modul-2 - Modula-2

Modula-2
Paradigmen zwingend , strukturiert , modular , Daten- und Prozedurversteckung , gleichzeitig
Familie Wirth Module
Entworfen von Niklaus Wirth
Erstmals erschienen 1978 ; Vor 43 Jahren ( 1978 )
Schreibdisziplin Statisch , stark , sicher
Umfang Lexikalisch (statisch)
Plattform Lilith ( AMD 2901 )
Betriebssystem Plattformübergreifend
Dateinamenerweiterungen .mod, .m2, .def, .MOD, .DEF, .mi, .md
Webseite www .modula2 .org
Wichtige Implementierungen
ETH-Compiler geschrieben von Niklaus Wirth
GNU Modula-2
ADW Modula-2
Dialekte
PIM2, PIM3, PIM4, ISO
Beeinflusst von
Modula , Mesa , Pascal , ALGOL W , Euclid
Beeinflusst
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Seed7 , Zonnon , Modula-GM

Modula-2 ist eine strukturierte, prozedurale Programmiersprache, die zwischen 1977 und 1985 von Niklaus Wirth an der ETH Zürich entwickelt wurde . Es wurde als Sprache für das Betriebssystem und die Anwendungssoftware der Lilith Personal Workstation entwickelt . Es wurde später für die Programmierung außerhalb des Lilith-Kontexts verwendet.

Wirth betrachtete Modula-2 als Nachfolger seiner früheren Programmiersprachen Pascal und Modula . Die wichtigsten Konzepte sind:

  1. Das Modul als Kompiliereinheit zum separaten Kompilieren
  2. Die Coroutine als Grundbaustein für nebenläufige Prozesse
  3. Arten und Verfahren, die den Zugriff auf maschinenspezifische Daten ermöglichen

Das Sprachdesign wurde von der Mesa- Sprache und dem Xerox Alto beeinflusst , beide von Xerox PARC , die Wirth während seines Sabbatjahres 1976 dort sah. Die Computerzeitschrift Byte widmete der Sprache und ihrem Umfeld die August-Ausgabe 1984.

Auf Modula-2 folgte Modula-3 und später die Oberon- Sprachreihe.

Beschreibung

Modula-2 ist eine universelle prozedurale Sprache , die ausreichend flexibel ist, um Systemprogrammierung durchzuführen , aber mit viel breiterer Anwendung. Insbesondere wurde es entwickelt, um auf einfache Weise separates Kompilieren und Datenabstraktion zu unterstützen. Ein Großteil der Syntax basiert auf Wirths früherer und bekannterer Sprache Pascal . Modula-2 wurde entwickelt, um Pascal weitgehend ähnlich zu sein, wobei einige Elemente und syntaktische Mehrdeutigkeiten beseitigt wurden und ein wichtiges Modulkonzept hinzugefügt wurde und direkte Sprachunterstützung für Multiprogramming .

Die Sprache ermöglicht die Verwendung von One-Pass-Compilern . Ein solcher Compiler von Gutknecht und Wirth war etwa viermal schneller als frühere Multi-Pass-Compiler .

Hier ein Beispiel für den Quellcode für das Programm "Hello world":

MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
  WriteString("Hello World!")
END Hello.

Ein Modula-2- Modul kann verwendet werden, um einen Satz verwandter Unterprogramme und Datenstrukturen zu kapseln und ihre Sichtbarkeit von anderen Teilen des Programms einzuschränken. Das Moduldesign implementierte die Datenabstraktionsfunktion von Modula-2 auf sehr saubere Weise. Modula-2-Programme bestehen aus Modulen, die jeweils aus zwei Teilen bestehen: einem Definitionsmodul , dem Schnittstellenteil, der nur die Teile des Subsystems enthält, die exportiert werden (für andere Module sichtbar), und einem Implementierungsmodul . die den modulinternen Arbeitscode enthält.

Die Sprache hat eine strenge Bereichskontrolle . Der Geltungsbereich eines Moduls kann als undurchdringliche Wand betrachtet werden: Außer bei Standardkennungen ist kein Objekt von außen innerhalb eines Moduls sichtbar, es sei denn, es wurde explizit importiert; kein internes Modulobjekt ist von außen sichtbar, es sei denn, es wird explizit exportiert.

Angenommen, Modul M1 exportiert die Objekte a, b, c und P, indem es seine Bezeichner in einer expliziten Exportliste aufzählt

  DEFINITION MODULE M1;
    EXPORT QUALIFIED a, b, c, P;
    ...

Dann werden die Objekte a, b, c und P aus Modul M1 nun außerhalb des Moduls M1 als M1.a, M1.b, M1.c und M1.P bekannt. Sie werden qualifiziert nach außen exportiert (sofern Modul M1 global ist). Der Name des exportierenden Moduls, dh M1, wird als Qualifizierer verwendet, gefolgt vom Namen des Objekts.

Angenommen, Modul M2 enthält die folgende IMPORT-Deklaration

  MODULE M2;
    IMPORT M1;
    ...

Dies bedeutet dann, dass die von Modul M1 nach außen exportierten Objekte aus seinem umgebenden Programm nun innerhalb des Moduls M2 verwendet werden können. Sie werden qualifiziert referenziert, also: M1.a, M1.b, M1.c und M1.P. Beispiel:

    ...
    M1.a := 0;
    M1.c := M1.P(M1.a + M1.b);
    ...

Qualifizierter Export vermeidet Namenskonflikte: Wenn beispielsweise ein anderes Modul M3 auch ein Objekt namens P exportieren würde, dann können wir die beiden Objekte noch unterscheiden, da sich M1.P von M3.P unterscheidet. Dank des qualifizierten Exports spielt es keine Rolle, dass beide Objekte in ihren Exportmodulen M1 und M3 P heißen.

Es existiert eine alternative Methode, die von Modula-2-Programmierern weit verbreitet ist. Angenommen, Modul M4 ist wie folgt formuliert:

  MODULE M4;
    FROM M1 IMPORT a, b, c, P;

Dies bedeutet dann, dass Objekte, die von Modul M1 nach außen exportiert wurden, wieder innerhalb von Modul M4 verwendet werden können, nun aber durch bloße Verweise auf die exportierten Bezeichner in unqualifizierter Weise, also: a, b, c und P. Beispiel:

    ...
    a := 0;
    c := P(a + b);
    ...

Diese Methode des unqualifizierten Imports ermöglicht die Verwendung von Variablen und anderen Objekten außerhalb ihres exportierenden Moduls auf genau dieselbe einfache, dh unqualifizierte Weise wie innerhalb des exportierenden Moduls. Für alle Objekte, für die dies explizit erlaubt ist, sind die Wände um alle Module nun irrelevant geworden. Der unqualifizierende Import ist natürlich nur nutzbar, wenn keine Namenskonflikte vorliegen.

Diese Export- und Importregeln mögen unnötig restriktiv und ausführlich erscheinen. Sie schützen aber nicht nur Objekte vor unerwünschten Zugriffen, sondern haben auch den angenehmen Nebeneffekt, dass die Definition jedes Bezeichners in einem Programm automatisch mit Querverweisen versehen wird: Wird der Bezeichner durch einen Modulnamen qualifiziert, dann stammt die Definition von dieses Modul. Andernfalls, wenn es unqualifiziert auftritt, suchen Sie einfach rückwärts, und Sie werden entweder auf eine Deklaration dieses Bezeichners oder sein Vorkommen in einer IMPORT-Anweisung stoßen, die das Modul benennt, von dem es stammt. Diese Eigenschaft ist sehr nützlich, wenn Sie versuchen, große Programme mit vielen Modulen zu verstehen.

Die Sprache ermöglicht (begrenzte) Einzelprozessor-Parallelität ( Monitore , Coroutinen und explizite Kontrollübertragung) und Hardwarezugriff (absolute Adressen, Bitmanipulation und Interrupts ). Es verwendet ein nominales Typsystem .

Dialekte

Es gibt zwei Hauptdialekte von Modula-2. Die erste ist PIM , benannt nach dem Buch Programming in Modula-2 von Niklaus Wirth. Es gab drei Hauptausgaben von PIM: die zweite, dritte (korrigiert) und vierte. Jeder beschreibt leichte Varianten der Sprache. Der zweite große Dialekt ist ISO , benannt nach den Standardisierungsbemühungen der International Organization for Standardization . Hier sind einige der Unterschiede zwischen ihnen.

  • PIM2 (1983)
    • Erforderliche explizite EXPORTKlausel in Definitionsmodulen.
    • Funktion SIZEmuss aus Modul importiert werdenSYSTEM
  • PIM3 (1985)
    • Die EXPORTKlausel wurde aus den Definitionsmodulen entfernt, nachdem festgestellt wurde, dass alles in einem Definitionsmodul die Schnittstelle zu diesem Modul definiert, daher war die EXPORTKlausel redundant.
    • Funktion SIZEist allgegenwärtig (sichtbar in jedem Bereich ohne Import)
  • PIM4 (1988)
    • Gibt das Verhalten des MODOperators an, wenn die Operanden negativ sind.
    • Erfordert, dass alle ARRAY OF CHARStrings mit ASCII NUL abgeschlossen werden, auch wenn der String genau in sein Array passt.
  • ISO (1996, 1998)
    • ISO Modula-2 löste die meisten Mehrdeutigkeiten in PIM Modula-2. Es fügte die Datentypen COMPLEXund LONGCOMPLEX, Ausnahmen, Modulterminierung ( FINALLY-Klausel) und eine vollständige Standard- Ein-/Ausgabe- (I/O) -Bibliothek hinzu . Es gibt viele kleine Unterschiede und Klarstellungen.

Supersätze

Es gibt mehrere Obermengen von Modula-2 mit Spracherweiterungen für bestimmte Anwendungsdomänen:

Derivate

Es gibt mehrere abgeleitete Sprachen, die Modula-2 sehr ähnlich sind, aber selbst neue Sprachen sind. Die meisten sind unterschiedliche Sprachen mit unterschiedlichen Zwecken und mit eigenen Stärken und Schwächen:

  • Modula-3 , entwickelt von einem Team ehemaliger Xerox-Mitarbeiter, die nach DEC und Olivetti . gezogen waren
  • Oberon , entwickelt an der ETH Zürich für das System Oberon online verfügbar .
  • Oberon-2 , Oberon mit OO-Erweiterungen
  • Active Oberon , eine weitere objektorientierte Erweiterung von Oberon , die ebenfalls an der ETH mit dem Hauptziel entwickelt wurde, die parallele Programmierung auf Multiprozessor- und Multicore-Systemen zu unterstützen.
  • Parallaxis, eine Sprache für maschinenunabhängige datenparallele Programmierung
  • Umbriel, entwickelt von Pat Terry als Unterrichtssprache
  • YAFL, eine Forschungssprache von Darius Blasband

Viele andere aktuelle Programmiersprachen haben Funktionen von Modula-2 übernommen.

Sprachelemente

Reservierte Wörter

PIM [2,3,4] definiert 40 reservierte Wörter :

AND         ELSIF           LOOP       REPEAT
ARRAY       END             MOD        RETURN
BEGIN       EXIT            MODULE     SET
BY          EXPORT          NOT        THEN
CASE        FOR             OF         TO
CONST       FROM            OR         TYPE
DEFINITION  IF              POINTER    UNTIL
DIV         IMPLEMENTATION  PROCEDURE  VAR
DO          IMPORT          QUALIFIED  WHILE
ELSE        IN              RECORD     WITH

Eingebaute Kennungen

PIM [3,4] definiert 29 eingebaute Kennungen :

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

Verwendung eingebetteter Systeme

Modula-2 wird verwendet, um viele eingebettete Systeme zu programmieren .

Cambridge Modula-2

Cambridge Modula-2 von Cambridge Microprocessor Systems basiert auf einer Teilmenge von PIM4 mit Spracherweiterungen für die Embedded-Entwicklung. Der Compiler läuft unter DOS und generiert Code für eingebettete Mikrocontroller der Motorola 68000-Serie (M68k), auf denen ein MINOS-Betriebssystem läuft.

Mod51

Mod51 von Mandeno Granville Electronics basiert auf ISO Modula-2 mit Spracherweiterungen für die Embedded-Entwicklung nach IEC1131, einem Industriestandard für speicherprogrammierbare Steuerungen (SPS), der eng mit Modula-2 verwandt ist. Der Mod51-Compiler generiert eigenständigen Code für 80C51-basierte Mikrocontroller.

Modula-GM

Delco Electronics , damals eine Tochtergesellschaft von GM Hughes Electronics , entwickelte ab 1985 eine Version von Modula-2 für eingebettete Steuerungssysteme. Delco nannte es Modula-GM. Es war die erste höhere Programmiersprache, die verwendet wurde, um Maschinencode (Sprache) für eingebettete Systeme in den Motorsteuergeräten (ECUs) von Delco zu ersetzen . Dies war von Bedeutung, da Delco 1988 über 28.000 ECUs pro Tag für GM produzierte. Dies war damals der weltweit größte Hersteller von Steuergeräten. Der erste experimentelle Einsatz von Modula-GM in einem eingebetteten Controller war 1985 im Antiblockiersystem-Controller, der auf dem Mikroprozessor Motorola 68xxx basierte, und 1993 in der Gen-4-ECU, die von den Champ Car World Series Championship Auto Racing Teams (CART) verwendet wurde. und Teams der Indy Racing League (IRL). Der erste Produktionseinsatz von Modula-GM war der Einsatz in GM-Lkw, beginnend mit dem Fahrzeugsteuermodul (VCM) des Modelljahres 1990, das zur Steuerung der Vortec- Motoren von GM Powertrain verwendet wird. Modula-GM wurde auch auf allen ECUs für GMs 90° Buick V6-Motorenfamilie 3800 Series II verwendet, die im Buick Park Avenue Modelljahr 1997-2005 verwendet wurde . Die Modula-GM-Compiler und die zugehörigen Softwareverwaltungstools wurden von Delco von Intermetrics bezogen .

Modula-2 wurde als Grundlage für die Auswahl für Hochsprache des Delco wegen seiner vielen Stärken gegenüber anderen alternativen Sprachen zur Auswahl 1986 Nach Delco Electronics wurde von GM (mit anderen Komponente Abteilungen) zu bilden , ausgegliedert Delphi Automotive Systems im Jahr 1995, Global Sourcing erfordert, dass eine nicht proprietäre High-Level-Softwaresprache verwendet wird. Die jetzt bei Delphi entwickelte eingebettete ECU-Software wird mit kommerziellen Compilern für die Sprache C kompiliert .

Russische Navigationssatelliten

Die Satelliten des russischen Funknavigations-Satelliten-Service- Frameworks GLONASS , ähnlich dem Global Positioning System (GPS) der Vereinigten Staaten , sind in Modula-2 programmiert.

Compiler

  • Amsterdam Compiler Kit (ACK) Modula-2 – für MINIX ; Freeware
  • ADW Modula-2 – für Windows, ISO-konform, ISO/IEC 10514-1, ISO/IEC 10514-2 (OO-Erweiterung), ISO/IEC 10514-3 (generische Erweiterung); Freeware
  • Aglet Modula-2 – für AmigaOS 4.0 für PowerPC ; Freeware
  • Angepasste Softwaretools (FST) Modula-2 – für DOS; Freeware
  • Gardens Point Modula-2 (GPM) – für BSD, Linux, OS/2, Solaris ; ISO-konform; Freeware, Stand 30. Juli 2014
  • Gardens Point Modula-2 (GPM/CLR) – für .NET Framework ; Freeware
  • GNU Modula-2 – für GCC-Plattformen, Version 1.0, veröffentlicht am 11. Dezember 2010; Konformität: PIM2, PIM3, PIM4, ISO; freie Software , GNU General Public License (GPL)
  • M2Amiga – für Amiga ; gratis Software
  • M2M – von N. Wirth und Mitarbeitern der ETH Zürich, plattformübergreifend, generiert M-Code für virtuelle Maschine ; Freeware
  • MacMETH – von N. Wirth und Mitarbeitern der ETH Zürich für Macintosh, nur Classic; Freeware
  • Mod51 – für die Intel 80x51 Mikrocontroller-Familie, ISO-konform, IEC1132-Erweiterungen; proprietäre Software
  • Megamax Modula-2 – für Atari ST mit Dokumentation nur in deutscher Sprache; Freeware
  • Modula-2 R10 – Referenz-Compiler für dieses Modula; Open Source, Peer-Review
  • ModulaWare – für OpenVMS ( VAX und Alpha ), ISO-konform; proprietäre Software
  • ORCA/Modula-2 – für Apple IIGS von The Byte Works für den Apple Programmer's Workshop
  • p1 Modula-2 – für Macintosh , Classic und macOS (nur PowerPC und Carbon (API) ), ISO-konform; proprietäre Software
  • MOCKA – für verschiedene Plattformen, PIM-konform; kommerzielle, Freeware-Linux/BSD-Versionen
  • TDI Modula-2 – für Atari ST , von TDI Software
  • Terra M2VMS – für OpenVMS ( VAX und Alpha ), PIM-kompatibel; proprietäre Software
  • m2c, Ulm Modula-2 System – für Solaris (Sun SPARC und Motorola 68k ); freie Software, GNU General Public License (GPL)
  • XDS – ISO-konform, TopSpeed-kompatible Bibliothek: Native XDS-x86 für x86 (Windows und Linux); XDS-C für Windows und Linux (16- und 32-Bit-Versionen), Targets C ( K&R & ANSI ); Freeware

Turbo-Modula-2

Turbo Modula-2 war ein Compiler und eine integrierte Entwicklungsumgebung für MS-DOS , die von Borland entwickelt, aber nicht veröffentlicht wurde . Jensen and Partners, zu denen auch Borland-Mitbegründer Niels Jensen gehörte, kauften die unveröffentlichte Codebasis und verwandelten sie in TopSpeed ​​Modula-2. Es wurde schließlich an Clarion verkauft, das jetzt im Besitz von SoftVelocity ist, das den Modula-2-Compiler immer noch als Teil seiner Clarion- Produktlinie anbietet .

Eine Zilog Z80 CP/M- Version von Turbo Modula-2 wurde kurzzeitig von Echelon unter Lizenz von Borland vermarktet. Eine Begleitversion für Hitachi HD64180 wurde von Micromint als Entwicklungswerkzeug für ihren SB-180-Einplatinencomputer verkauft.

IBM Modula-2

IBM hatte einen Modula-2-Compiler für den internen Gebrauch, der sowohl auf OS/2 als auch auf AIX lief und erstklassige Unterstützung in IBMs E2- Editor hatte. IBM Modula-2 für Teile der verwendet wurde , OS / 400 Vertical lizenzierten internen Codes (effektiv der Kernel von OS / 400). Dieser Code wurde durch C++ ersetzt, als OS/400 auf die IBM RS64- Prozessorfamilie portiert wurde . Es existierte auch ein Motorola 68000- Backend, das möglicherweise in Embedded-Systems-Produkten verwendet wurde.

Betriebssysteme

Modula-2 wird verwendet, um einige Betriebssysteme (OSs) zu programmieren . Die Modula-2-Modulstruktur und -Unterstützung werden direkt in zwei verwandten Betriebssystemen verwendet.

Das Betriebssystem namens Medos-2 für die Lilith-Workstation wurde an der ETH Zürich von Svend Erik Knudsen mit Beratung von Wirth entwickelt. Es ist ein objektorientiertes Einzelbenutzer -Betriebssystem, das aus Modula-2-Modulen aufgebaut ist.

Das Betriebssystem namens Excelsior für die Kronos- Workstation wurde von der Akademie der Wissenschaften der Sowjetunion , sibirische Zweigstelle, Novosibirsk Computing Center, Modular Asynchronous Developable Systems (MARS)-Projekt, Kronos Research Group (KRG) entwickelt. Es ist ein Einzelplatzsystem basierend auf Modula-2-Modulen.

Bücher

  • Wirth, Niklaus (1988). Programmierung in Modula-2 (4. Aufl.). Berlin Heidelberg : Springer-Verlag . doi : 10.1007/978-3-642-83565-0 . ISBN 978-0-387-96051-7.
  • König, KN (1. Januar 1988). Modula-2: Ein vollständiger Leitfaden . Burlington, Massachusetts : Jones and Bartlett Publishers. ISBN 978-0669110913.
  • Sutcliffe, Richard J. (2004–2005). Modula-2: Abstraktionen für Daten- und Programmierstrukturen . Arjay-Bücher. ISBN 978-0-669-11091-3. Verwendet ISO-Standard Modula-2.
  • Gleaves, Richard (1984). Modula-2 für Pascal-Programmierer . Springer Books on Professional Computing (1. Aufl.). Schweiz: Springer Natur. doi : 10.1007/978-1-4613-8531-8 . ISBN 978-0-387-96051-7.
  • Cooper, Doug (1. September 1990). Oh mein! Modula-2: Eine Einführung in die Programmierung . New York City , New York : WW Norton & Company . ISBN 978-0393960099.

Verweise

Externe Links

Dieser Artikel basiert auf Material, das vor dem 1. November 2008 aus dem Free Online Dictionary of Computing entnommen wurde und unter den "Relicensing"-Bedingungen der GFDL , Version 1.3 oder höher, enthalten ist.