Modula -2 - Modula-2

Modula-2
Paradigmata imperativní , strukturované , modulární , skrývání dat a procedur , souběžné
Rodina Wirth Modula
Navrhl Niklaus Wirth
Poprvé se objevil 1978 ; Před 43 lety ( 1978 )
Kázeň při psaní Statický , silný , bezpečný
Rozsah Lexikální (statický)
Plošina Lilith ( AMD 2901 )
OS Cross-platform
Rozšíření názvu souboru .mod, .m2, .def, .MOD, .DEF, .mi, .md
webová stránka www .modula2 .org
Hlavní implementace
Překladač ETH napsaný Niklausem Wirthem
GNU Modula-2
ADW Modula-2
Nářečí
PIM2, PIM3, PIM4, ISO
Ovlivněn
Modula , Mesa , Pascal , ALGOL W , Euclid
Ovlivněn
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Seed7 , Zonnon , Modula-GM

Modula-2 je strukturovaný procedurální programovací jazyk vyvinutý v letech 1977 až 1985 Niklausem Wirthem v ETH Curych . To bylo vytvořeno jako jazyk pro operační systém a aplikační software na Lilith osobního stanici . Později byl použit pro programování mimo kontext Lilith.

Wirth považoval Modula-2 za nástupce svých dřívějších programovacích jazyků Pascal a Modula . Hlavní koncepty jsou:

  1. Modul jako kompilační jednotka pro samostatné kompilace
  2. Korutina jako základní stavební kámen souběžných procesů
  3. Typy a postupy, které umožňují přístup k datům specifickým pro počítač

Jazykový design byl ovlivněn jazykem Mesa a Xerox Alto , oba od Xerox PARC , který Wirth viděl během svého sabatického roku 1976 . Počítačový časopis Byte věnoval číslu ze srpna 1984 jazyk a jeho okolní prostředí.

Po Modula-2 následovala Modula-3 a později řada jazyků Oberon .

Popis

Modula-2 je obecný procedurální jazyk , dostatečně flexibilní pro programování systémů , ale s mnohem širším využitím. Zejména byl navržen tak, aby podporoval samostatné kompilace a abstrahování dat přímým způsobem. Velká část syntaxe je založena na Wirthově dřívějším a známějším jazyce, Pascalu . Modula-2 byla navržena tak, aby byla široce podobná Pascalu, s odstraněním některých prvků a syntaktických nejasností a důležitým doplněním konceptu modulu a přímou jazykovou podporou multiprogramování .

Jazyk umožňuje použití jednoprůchodových překladačů . Takový překladač od Gutknechta a Wirtha byl asi čtyřikrát rychlejší než dřívější víceprůchodové překladače .

Zde je příklad zdrojového kódu programu „Hello world“:

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

Modula-2 modul může být použit k zapouzdření sadu souvisejících podprogramy a datové struktury, a omezit jejich viditelnost z jiných částí programu. Návrh modulu implementoval funkci odběru dat Modula-2 velmi čistým způsobem. Programy Modula-2 se skládají z modulů, z nichž každý se skládá ze dvou částí: definiční modul , část rozhraní, která obsahuje pouze ty části subsystému, které jsou exportovány (viditelné pro ostatní moduly), a implementační modul , který obsahuje pracovní kód, který je interní v modulu.

Jazyk má přísnou kontrolu rozsahu . Rozsah modulu lze považovat za neproniknutelnou zeď: Kromě standardních identifikátorů není uvnitř modulu viditelný žádný objekt zvenčí, pokud není výslovně importován; zvenčí není viditelný žádný interní objekt modulu, pokud není výslovně exportován.

Předpokládejme, že modul M1 exportuje objekty a, b, c a P výčtem jeho identifikátorů v explicitním seznamu exportů

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

Potom se objekty a, b, c a P z modulu M1 stávají nyní mimo modul M1 označovány jako M1.a, M1.b, M1.c a M1.P. Exportují se kvalifikovaným způsobem ven (předpokládaný modul M1 je globální). Název exportujícího modulu, tj. M1, je použit jako kvalifikátor následovaný názvem objektu.

Předpokládejme, že modul M2 obsahuje následující prohlášení IMPORT

  MODULE M2;
    IMPORT M1;
    ...

Pak to znamená, že objekty exportované modulem M1 na vnější stranu jeho uzavíracího programu lze nyní použít uvnitř modulu M2. Jsou na ně odkazovány kvalifikovaným způsobem, tedy: M1.a, M1.b, M1.c a M1.P. Příklad:

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

Kvalifikovaný export se vyhýbá střetům názvů: Pokud by například jiný modul M3 exportoval také objekt nazvaný P, pak můžeme oba objekty ještě rozlišit, protože M1.P se liší od M3.P. Díky kvalifikovanému exportu nezáleží na tom, že se oběma objektům v exportních modulech M1 a M3 říká P.

Existuje alternativní metoda, kterou programátoři Modula-2 široce používají. Předpokládejme, že modul M4 je formulován takto:

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

Pak to znamená, že objekty exportované modulem M1 ven lze opět použít uvnitř modulu M4, ale nyní pouhými odkazy na exportované identifikátory nekvalifikovaným způsobem, tedy: a, b, c a P. Příklad:

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

Tento způsob nekvalifikovaného importu umožňuje použití proměnných a dalších objektů mimo jejich exportní modul úplně stejným jednoduchým, tj. Nekvalifikovaným způsobem jako uvnitř exportního modulu. Stěny obklopující všechny moduly se nyní staly irelevantními pro všechny objekty, u kterých to bylo výslovně povoleno. Nekvalifikační import je samozřejmě použitelný pouze v případě, že nedojde ke střetu jmen.

Tato pravidla pro export a import se mohou zdát zbytečně omezující a podrobná. Ale nejenže chrání objekty před nežádoucím přístupem, ale mají také příjemný vedlejší účinek-automatické křížové odkazy na definici každého identifikátoru v programu: pokud je identifikátor kvalifikován názvem modulu, pak definice pochází z ten modul. V opačném případě, pokud k němu dojde nekvalifikovaně, jednoduše vyhledejte zpět a setkáte se buď s deklarací tohoto identifikátoru, nebo s jeho výskytem v příkazu IMPORT, který pojmenuje modul, ze kterého pochází. Tato vlastnost se stává velmi užitečnou, když se pokoušíte porozumět velkým programům obsahujícím mnoho modulů.

Jazyk poskytuje (omezenou) souběžnost jednoho procesoru ( monitory , korutiny a explicitní přenos kontroly) a přístup k hardwaru (absolutní adresy, manipulace s bitem a přerušení ). Používá systém nominálního typu .

Nářečí

Modula-2 má dva hlavní dialekty. Prvním je PIM , pojmenovaný podle knihy Programování v modulu 2 od Niklause Wirtha. Byly tam tři hlavní edice PIM: druhé, třetí (opravené) a čtvrté. Každý popisuje mírné varianty jazyka. Druhým hlavním dialektem je ISO , pojmenovaný podle standardizačního úsilí Mezinárodní organizací pro normalizaci . Zde je několik rozdílů mezi nimi.

  • PIM2 (1983)
    • Požadovaná explicitní EXPORTklauzule v definičních modulech.
    • Funkci SIZEje třeba importovat z moduluSYSTEM
  • PIM3 (1985)
    • Odstranila EXPORTklauzuli z definičních modulů v návaznosti na to, že vše v definičním modulu definuje rozhraní k tomuto modulu, a proto byla EXPORTklauzule nadbytečná.
    • Funkce SIZEje všudypřítomná (viditelná v jakémkoli rozsahu bez importu)
  • PIM4 (1988)
    • Určuje chování MODoperátora, když jsou operandy záporné.
    • Vyžadováno, aby všechny ARRAY OF CHARřetězce byly ukončeny ASCII NUL, i když řetězec přesně zapadá do jeho pole.
  • ISO (1996, 1998)
    • ISO Modula-2 vyřešil většinu nejasností v PIM Modula-2. Přidal datové typy COMPLEXa LONGCOMPLEX, výjimky, ukončení modulu ( FINALLYklauzule) a kompletní standardní knihovnu vstupů/výstupů (I/O) . Existuje mnoho drobných rozdílů a vysvětlení.

Supersety

Existuje několik nadmnožin Modula-2 s jazykovými příponami pro konkrétní aplikační domény:

Deriváty

Existuje několik odvozených jazyků, které se velmi podobají Modula-2, ale jsou samy o sobě novými jazyky. Většina z nich jsou různé jazyky s různými účely a se silnými a slabými stránkami:

  • Modula-3 , vyvinutý týmem bývalých zaměstnanců společnosti Xerox, kteří se přestěhovali do DEC a Olivetti
  • Oberon , vyvinutý v ETH Zürich pro System Oberon dostupný online .
  • Oberon-2 , Oberon s rozšířeními OO
  • Active Oberon , další objektově orientované rozšíření Oberonu , vyvinuté také na ETH s hlavním cílem podporovat paralelní programování na víceprocesorových a vícejádrových systémech.
  • Parallaxis, jazyk pro strojově nezávislé datové paralelní programování
  • Umbriel, vyvinutý Pat Terry jako vyučovací jazyk
  • YAFL, výzkumný jazyk od Dariuse Blasbanda

Mnoho dalších současných programovacích jazyků přijalo funkce Modula-2.

Jazykové prvky

Vyhrazená slova

PIM [2,3,4] definuje 40 vyhrazených slov :

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

Integrované identifikátory

PIM [3,4] definuje 29 vestavěných identifikátorů :

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

Použití vestavěného systému

Modula-2 se používá k programování mnoha vestavěných systémů .

Cambridge Modula-2

Cambridge Modula-2 od Cambridge Microprocessor Systems je založen na podmnožině PIM4 s jazykovými rozšířeními pro vestavěný vývoj. Kompilátor běží na DOSu a generuje kód pro vestavěné mikrokontroléry Motorola řady 68000 (M68k) s operačním systémem MINOS.

Mod51

Mod51 od Mandeno Granville Electronics je založen na ISO Modula-2 s jazykovými rozšířeními pro vestavěný vývoj podle IEC1131, průmyslového standardu pro programovatelné logické automaty (PLC) úzce související s Modula-2. Kompilátor Mod51 generuje samostatný kód pro mikrokontroléry založené na 80C51.

Modula-GM

Společnost Delco Electronics , poté dceřiná společnost GM Hughes Electronics , vyvinula od roku 1985 verzi Modula-2 pro vestavěné řídicí systémy. Společnost Delco ji pojmenovala Modula-GM. Jednalo se o první programovací jazyk na vysoké úrovni, který nahradil strojový kód (jazyk) pro vestavěné systémy v řídicích jednotkách motoru (ECU) společnosti Delco . To bylo významné, protože společnost Delco vyráběla v roce 1988 pro GM více než 28 000 ECU denně. To byl tehdy největší světový výrobce ECU. První experimentální použití Modula-GM ve vestavěném ovladači bylo v roce 1985 Antilock Braking System Controller, který byl založen na mikroprocesoru Motorola 68xxx, a v roce 1993 Gen-4 ECU používaný Champ Car World Series Championship Auto Racing Teams (CART) a týmy Indy Racing League (IRL). První výrobní použití Modula-GM bylo jeho použití v nákladních automobilech GM počínaje řídicím modulem vozidla (VCM) modelového roku 1990 používaným ke správě motorů Vortec společnosti GM Powertrain . Modula-GM byl také použit na všech ECU pro GM 90 ° motor Buick V6 řady 3800 Series II používaný v modelovém roce 1997-2005 Buick Park Avenue . Kompilátory Modula-GM a související nástroje pro správu softwaru pochází od společnosti Delco od společnosti Intermetrics .

Modula-2 byl vybrán jako základ pro jazyk Delco na vysoké úrovni kvůli jeho mnoha přednostem oproti jiným alternativním jazykovým volbám v roce 1986. Poté, co byla společnost Delco Electronics vyčleněna z GM (s dalšími divizemi komponent) do Delphi Automotive Systems v roce 1995, globální zdroje vyžadovalo použití nechráněného softwarového jazyka na vysoké úrovni. ECU vestavěný software vyvinula u Delphi je sestaven s obchodními překladače pro jazyk C .

Ruské radionavigační satelity

Družice ruského rámce radionavigačních družicových služeb GLONASS , podobné americkému globálnímu pozičnímu systému (GPS), jsou naprogramovány v Modula-2.

Překladače

  • Amsterdam Compiler Kit (ACK) Modula-2-pro MINIX ; freeware
  • ADW Modula-2-pro Windows, kompatibilní s ISO, ISO/IEC 10514-1, ISO/IEC 10514-2 (rozšíření OO), ISO/IEC 10514-3 (obecné rozšíření); freeware
  • Aglet Modula-2-pro AmigaOS 4.0 pro PowerPC ; freeware
  • Fitted Software Tools (FST) Modula-2-pro DOS; freeware
  • Gardens Point Modula-2 (GPM)-pro BSD, Linux, OS/2, Solaris ; V souladu s ISO; freeware, ke dni 30. července 2014
  • Gardens Point Modula-2 (GPM/CLR)-pro .NET Framework ; freeware
  • GNU Modula-2-pro platformy GCC, verze 1.0 vydaná 11. prosince 2010; shoda: PIM2, PIM3, PIM4, ISO; svobodný software , GNU General Public License (GPL)
  • M2Amiga - pro Amigu ; svobodný software
  • M2M-N. Wirth a spolupracovníci z ETH Zurich, multiplatformní, generuje M-kód pro virtuální stroj ; freeware
  • MacMETH - N. Wirth a spolupracovníci z ETH Zurich pro Macintosh, pouze Classic; freeware
  • Mod51 - pro rodinu mikrořadičů Intel 80x51, kompatibilní s ISO, rozšíření IEC1132; proprietární software
  • Megamax Modula-2-pro Atari ST pouze s dokumentací v němčině; freeware
  • Modula-2 R10-referenční překladač pro tuto Modulu; open-source, peer review
  • ModulaWare - pro OpenVMS ( VAX a Alpha ), kompatibilní s ISO; proprietární software
  • ORCA/Modula-2-pro Apple IIGS by The Byte Works pro Apple Programmer's Workshop
  • p1 Modula-2-pro Macintosh , Classic a macOS (pouze PowerPC a Carbon (API) ), kompatibilní s ISO; proprietární software
  • MOCKA - pro různé platformy, kompatibilní s PIM; komerční, freeware verze Linux/BSD
  • TDI Modula-2-pro Atari ST , od TDI Software
  • Terra M2VMS - pro OpenVMS ( VAX a Alpha ), kompatibilní s PIM; proprietární software
  • m2c, Ulm Modula-2 System-pro Solaris (Sun SPARC a Motorola 68k ); svobodný software, GNU General Public License (GPL)
  • XDS-ISO kompatibilní, TopSpeed ​​kompatibilní knihovna: Nativní XDS-x86 pro x86 (Windows a Linux); XDS-C pro Windows a Linux (16- a 32bitové verze), cíle C ( K&R & ANSI ); freeware

Turbo Modula-2

Turbo Modula-2 byl kompilátor a integrované vývojové prostředí pro MS-DOS vyvinuté, ale nebylo publikováno, společností Borland . Jensen and Partners, mezi které patřil spoluzakladatel Borlandu Niels Jensen, koupil nevydanou kódovou základnu a přeměnil ji na TopSpeed ​​Modula-2. Nakonec byl prodán společnosti Clarion, nyní ve vlastnictví SoftVelocity, která stále nabízí kompilátor Modula-2 jako součást produktové řady Clarion .

Z80 CP / M verze Turbo Modula-2 byl stručně prodáván firmou Echelon na základě licence od společnosti Borland. Společnou verzi pro Hitachi HD64180 prodala společnost Micromint jako vývojový nástroj pro jejich jednodeskový počítač SB-180.

IBM Modula-2

IBM měla kompilátor Modula-2 pro interní použití, který běžel na OS/2 i AIX , a měl prvotřídní podporu v editoru IBM E2 . IBM Modula-2 byl použit pro části vertikálního licenčního interního kódu OS/400 (ve skutečnosti jádro OS/400). Tento kód byl nahrazen jazykem C ++, když byl OS/400 portován do rodiny procesorů IBM RS64 . Motorola 68000 backend také existovaly, které mohou být použity v oblasti vestavěných systémů výrobků.

Operační systémy

Modula-2 se používá k programování některých operačních systémů (OS). Struktura a podpora modulu Modula-2 se používají přímo ve dvou souvisejících OS.

Operační systém Medos-2 pro pracovní stanici Lilith byl vyvinut na ETH Zurich svendem Erikem Knudsenem na základě doporučení Wirtha. Jedná se o objektově orientovaný operační systém pro jednoho uživatele postavený z modulů Modula-2.

OS pojmenovaný Excelsior pro pracovní stanici Kronos vyvinula Akademie věd Sovětského svazu , sibiřská pobočka, Novosibirsk Computing Center, projekt Modular Asynchronous Developable Systems (MARS), Kronos Research Group (KRG). Jedná se o systém pro jednoho uživatele založený na modulech Modula-2.

Knihy

  • Wirth, Niklaus (1988). Programování v Modula-2 (4. vydání). Berlin Heidelberg : Springer-Verlag . doi : 10,1007/978-3-642-83565-0 . ISBN 978-0-387-96051-7.
  • King, KN (1. ledna 1988). Modula-2: Kompletní průvodce . Burlington, Massachusetts : Jones a Bartlett Publishers. ISBN 978-0669110913.
  • Sutcliffe, Richard J. (2004-2005). Modula-2: Abstractions for Data and Programming Structures . Arjayovy knihy. ISBN 978-0-669-11091-3. Používá modul ISO-standard Modula-2.
  • Gleaves, Richard (1984). Modula-2 pro programátory Pascal . Springer Books on Professional Computing (1. vyd.). Švýcarsko: Springer Nature. doi : 10,1007/978-1-4613-8531-8 . ISBN 978-0-387-96051-7.
  • Cooper, Doug (1. září 1990). Ach můj! Modula-2: Úvod do programování . New York City , New York : WW Norton & Company . ISBN 978-0393960099.

Reference

externí odkazy

Tento článek vychází z materiálu převzatého z Free On-line Dictionary of Computing před 1. listopadem 2008 a začleněn pod podmínky „relicencování“ GFDL , verze 1.3 nebo novější.