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 |
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 |
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:
- Modul jako kompilační jednotka pro samostatné kompilace
- Korutina jako základní stavební kámen souběžných procesů
- 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í
EXPORT
klauzule v definičních modulech. - Funkci
SIZE
je třeba importovat z moduluSYSTEM
- Požadovaná explicitní
-
PIM3 (1985)
- Odstranila
EXPORT
klauzuli 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 bylaEXPORT
klauzule nadbytečná. - Funkce
SIZE
je všudypřítomná (viditelná v jakémkoli rozsahu bez importu)
- Odstranila
-
PIM4 (1988)
- Určuje chování
MOD
operá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.
- Určuje chování
-
ISO (1996, 1998)
- ISO Modula-2 vyřešil většinu nejasností v PIM Modula-2. Přidal datové typy
COMPLEX
aLONGCOMPLEX
, výjimky, ukončení modulu (FINALLY
klauzule) a kompletní standardní knihovnu vstupů/výstupů (I/O) . Existuje mnoho drobných rozdílů a vysvětlení.
- ISO Modula-2 vyřešil většinu nejasností v PIM Modula-2. Přidal datové typy
Supersety
Existuje několik nadmnožin Modula-2 s jazykovými příponami pro konkrétní aplikační domény:
-
Nadmnožiny PIM
- Canterbury Modula-2 , rozšířený o rozšiřitelné záznamy podobné Oberonu [Toto bylo staženo a již není nikde k dispozici]
- Modula-2+ , rozšířený o preventivní vlákna a výjimky
- Modula-2* , paralelní rozšíření
- Modula-P , další paralelní rozšíření
- Modula – Prolog, přidává vrstvu Prolog
- Modula/R, přidává rozšíření relační databáze
- Modula-GM, přidává vestavěná systémová rozšíření
-
Nadmnožiny ISO
- ISO10514-2, přidává objektově orientovanou programovací vrstvu
- ISO10514-3, přidává vrstvu generického programování (generika)
- Supersety IEC
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 .
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ší.