Modul-2
Modul-2 |
Jazyková třída |
imperativní , strukturované , modulární , skrývání dat a metod |
Objevil se v |
1978 |
Autor |
Niklaus Wirth |
Typový systém |
statický , silný |
Hlavní implementace |
ETH Zurich (vytvořil Niklaus Wirth ), Gardens Point , p1 ,
Nativní XDS-x86 , gm2 (GNU Modula-2) |
Dialekty |
PIM2, PIM3, PIM4, ISO |
Byl ovlivněn |
Pascal , Mesa , ALGOL , Simula-67 |
ovlivnil |
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Zonnon , Modula-GM |
Modula-2 (Modula-2) je univerzální programovací jazyk , který je vývojem jazyka Pascal , který vyvinul Niklaus Wirth v roce 1978 .
Cíle a principy rozvoje jazyka
Jazyk Modula-2 byl vyvinut Niklausem Wirthem k vytvoření systémového softwaru pro počítač Lilith ., jehož vývoj začal v roce 1977 v Ústavu informatiky v Curychu . To určuje mnoho jeho vlastností. Jazyk byl původně navržen jako nástroj pro programování průmyslových systémů, který umožňuje psát spolehlivé, srozumitelné a udržovatelné programy. Zároveň by tento jazyk, i když zůstává jazykem na vysoké úrovni se silným psaním a podporou všech spolehlivých programovacích nástrojů, měl umožňovat přímý přístup k hardwaru, vytvářet specifické systémové programy , jako jsou ovladače přerušení a ovladače zařízení , a podporovat programování interagujících procesů běžících paralelně .
Bezprostředním předchůdcem Modula-2 byl jazyk Modula , vytvořený Wirthem v první polovině 70. let na základě Pascalu . Hlavním doplňkem, který se odráží v názvu jazyka, byla možnost rozdělit program do modulů – samostatných fragmentů kódu, které interagují prostřednictvím výslovně popsaných rozhraní. Syntaxe byla také přepracována a byly přidány paralelní programovací nástroje. Jediná experimentální implementace Modula se objevila v roce 1975 . Modul lze považovat za počáteční verzi, jakousi „alfa verzi“ Modula-2, syntakticky jsou si tyto dva jazyky velmi blízké. Navíc podle Wirtha byla Modula-2 ovlivněna jazykem Mesa ., vyvinutý v Xerox PARC .
Obecná charakteristika
Jazyk Modula-2 je strukturální , modulární programovací jazyk se syntaxí založenou na jazyku Pascal, ale znatelně revidovaný a vylepšený. Jeho hlavní charakteristické rysy jsou uvedeny níže.
- Program je sada modulů - nezávislých kompilačních jednotek, které lze zkompilovat samostatně. V tomto případě lze (ale nemusí) programový modul rozdělit na dvě části: definiční modul a implementační modul. Definiční modul je externí rozhraní modulu, tj. sada názvů konstant, proměnných, typů, záhlaví procedur a funkcí, které exportuje a které jsou dostupné externím modulům. Implementační modul obsahuje programový kód, zejména konkretizaci popisů všeho uvedeného v definičním modulu. Například typ záznamu může být deklarován v definičním modulu pouze se svým názvem, ale v implementačním modulu s kompletní strukturou. V tomto případě mohou externí moduly vytvářet hodnoty tohoto typu, volat procedury a funkce, které s nimi pracují, provádět přiřazení proměnných, ale nemají přímý přístup ke struktuře hodnot, protože tato struktura není popsána v definičním modulu. Pokud je struktura popsána pro stejný typ v modulu definic, bude k dispozici. Kromě modulů na globální úrovni je v Modulu-2 povoleno vytvářet lokální moduly.
- Import definic popsaných v jiných modulech je plně řízen. Můžete importovat celé definiční moduly, ale syntaxe vám umožňuje výrazně zpřesnit seznamy importu, jako je import konkrétních konstant, proměnných, procedur a funkcí z modulu, právě těch, které potřebujete.
- Všechna I/O zařízení jsou z jazyka vyloučena. Místo toho se používají knihovní moduly, které mají za úkol implementovat I/O na konkrétních systémech. Existuje však sada standardizovaných I/O knihoven, které poskytují potřebné funkce pro typické případy (vstup/výstup základních datových typů pomocí textového terminálu, souborové I/O).
- Do jazyka bylo zavedeno minimum konceptů a primitiv pro vícevláknové programování a byla také přidána standardní knihovna , která podporuje paralelní programy .
- Zahrnuty jsou prostředky přímého přístupu k počítačovému hardwaru, zejména je implementováno přímé mapování datových struktur do paměti, včetně přímého přiřazení adres.
Struktura jazyka je jednoduchá – má pouze 40 vyhrazených slov (pro srovnání v Ada je jich 63 ); oficiální „Language Report“, obsahující komplexní popis Modula-2, zabírá 40 stran (úplný popis zkrácené verze PL / 1 zabírá asi 200 stran).
Funkce syntaxe
Nejjednodušší způsob, jak popsat vlastnosti Modula-2, je porovnat jej s jazykem Pascal. Nejdůležitější rozdíly, kromě zavedení modulů a mechanismů exportu řízeného popisu, jsou následující.
- Jazyk rozlišuje velká a malá písmena – rozlišují se velká a malá písmena v identifikátorech. Všechna klíčová slova jsou psána velkými písmeny.
- Syntaxe je pravidelnější a zjednodušená. Všechny syntaktické konstrukce, kromě smyčky REPEAT-UNTIL, se řídí zásadou, že konstrukce začínající klíčovým slovem končí klíčovým slovem. Obecný tvar má zejména podmíněný operátor
IF THEN podmínka příkazy ELSIF THEN podmínka příkazy ELSIF THEN podmínka ... příkazy ELSE Příkazy END
To eliminovalo potřebu neustálého používání složených příkazů BEGIN-ENDa „žebříků“ příkazů IF pro vícestupňové testování podmínek.
- Smyčky WHILEa FORtaké poskytují tělo ze sady příkazů a končí vyhrazeným slovem END.
- Přidána nepodmíněná smyčka LOOP-END .
- Procedury i funkce jsou deklarovány klíčovým slovem PROCEDURE.
- Přidáno předdefinované pole typu BITSET - bit .
- Operátor nepodmíněného skoku GOTO byl z jazyka odstraněn .
- Byl přidán procedurální typ, který umožňuje přiřazovat proměnným procedury a funkce. Později byla tato funkce zahrnuta do Pascalu, kde původně nebyla k dispozici.
Dialekty
Existují dva hlavní dialekty Modula-2. První - PIM (podle názvu knihy Niklause Wirtha "Programming in Modula-2", kde byl uveden podrobný popis jazyka a hlavních systémových knihoven), existuje ve třech hlavních verzích, které se objevily postupně a minimálně se od sebe liší . Druhým hlavním dialektem je ISO , který je standardizován Mezinárodní organizací pro standardizaci. Hlavní rozdíly mezi dialekty a původním popisem jazyka jsou uvedeny níže.
- PIM2 (1983)
- Vyžaduje povinné použití direktivy EXPORT v modulu definic.
- Funkce SIZE je knihovní funkce a musí být importována z modulu SYSTEM .
- PIM3 (1985)
- Z definičních modulů byla odstraněna direktiva EXPORT . Změna byla motivována tím, že se exportuje celý obsah modulu definic, takže použití EXPORTU je nadbytečné.
- Funkce SIZE je předdefinovaná (k dispozici kdekoli v programu bez importu).
- PIM4 (1988)
- Objasnění chování operace MOD pro záporné operandy.
- Přidán požadavek, že všechny řetězce deklarované jako ARRAY OF CHAR musí být ukončeny nulou (ASCII NUL), i když řetězec zahrnuje celé pole.
- ISO [1] (1996 a 1998)
- Přidány datové typy COMPLEX a LONGCOMPLEX .
- Přidány výjimky.
- Přidána konstrukce pro kód ukončení modulu KONEČNĚ .
- Plně standardizovaná I/O knihovna.
- Byla provedena upřesnění, která odstranila většinu nejasností původního popisu, bylo provedeno mnoho drobných oprav a upřesnění.
Výhody a nevýhody
Rozhodně lze říci, že jazyk Modula-2, i když si zachovává pozitivní vlastnosti Pascalu, má řadu funkcí, které z něj dělají mnohem výkonnější jazyk a lépe se hodí pro systémové i aplikační programování . Hlavní výhody Modula-2 oproti moderním strukturním programovacím jazykům jsou následující [2] :
- Jednoduchost a stručnost definice jazyka. Kompletní definice syntaxe v notaci RBNF zabere necelé 3 stránky, plné syntaktické diagramy – 12 stran, oficiální „zpráva o jazyce“ má délku 40 stran, což je pro univerzální jazyk s takovými schopnostmi téměř naprosté minimum. Pro srovnání, oficiální úplná definice jazyka Ada je 400 strojopisných stránek.
- Jednoduchá, logická a jednotná syntaxe, bez nadbytečných konstrukcí a prvků, které vyvolávají pravopisné chyby. Modula-2 je první direktivní programovací jazyk, který skoncoval s příkazem GOTO .
- Promyšlený mechanismus rozdělení programu na kompilační jednotky (moduly) s explicitně popsanými rozhraními a plně řízenými importy, umožňující importovat jak celé moduly, tak jednotlivé prvky s možností jak kvalifikovaných (s názvem modulu), tak nekvalifikovaných použití názvů importovaných objektů.
- Vyloučení z jazyka vstupně-výstupních zařízení a většiny standardních procedur a funkcí a jejich přesunutí do knihoven navržených jako standardní moduly, což zjednodušuje jazyk a kompilátor a dává implementátorovi úplnou volnost v tom, jak jsou standardní postupy a funkce implementováno.
- Začlenění nízkoúrovňových programovacích mechanismů do jazyka, včetně přímé manipulace s pamětí a netypovanými daty a ukazateli, což umožňuje psát v jazyce vysoké úrovně většinu nízkoúrovňových programů, které byly tradičně psány v assembleru, jako např. jako ovladače a obsluhy přerušení .
- Dostupnost elementárních prostředků paralelního programování, zvolených tak, aby byla zaručena jejich adekvátní implementace jak na fyzicky multiprocesorových platformách, tak na platformách s časovým sdílením.
- Významný pro dobu vzniku jazyka byl vzhled procedurálního typu a podle toho i proměnné, ke kterým lze procedury dynamicky přiřazovat.
Mezi nevýhody jazyka patří:
- Slabost mechanismů paralelního programování , zejména organizace interakce paralelních procesů. Implementace těchto nástrojů je posunuta do systémových knihoven a standardní knihovna obsahuje pouze ty nejjednodušší nástroje pro řízení paralelizace. Paralelní program na Modulu-2, který používá ovládací prvky souběžnosti přesahující tyto limity, automaticky ztrácí přenositelnost. [3]
- Absence mechanismů pro správu mapování abstraktních typů do paměti. [3]
- Podpora lokálních modulů zbytečně komplikuje kompilátor. Důvody pro použití vnořených modulů jsou omezení rozsahu a zvýraznění částí programu s vysokou prioritou, aby byla zajištěna synchronizace během paralelního zpracování, ale mohou být implementovány jinými, jednoduššími a zjevnějšími prostředky. [čtyři]
- Explicitní rozdělení na implementační modul a definiční modul je kontroverzním rozhodnutím. Komplikuje to práci kompilátoru a nutí programátora synchronizovat změny v různých souborech. Lze poznamenat, že u potomka Modula-2 - Oberon - bylo od takového oddělení upuštěno, místo toho jsou v jediném programovém modulu exportované prvky (tvořící rozhraní modulu) jednoduše označeny speciálním způsobem. [čtyři]
V Modulu-2 lze také zaznamenat absenci řady funkcí známých a populárních v době jeho vytvoření, což lze připsat jak výhodám, tak nevýhodám jazyka, v závislosti na úhlu pohledu konkrétního kritika:
Použití
V SSSR se první kompilátory pro Modula-2 objevily v letech 1982-83 pro počítače SM-4 a Elektronika-60. Překladač pro BESM-6 byl vyvinut ve Výpočetním centru Akademie věd SSSR ( V.A. Serebryakov , V.G. Lyuty, A.N. Bezdušnyj) [5] . Současně byly vyvinuty programovací technologie a vytvořeny první balíčky aplikovaných programů založených na Modulu-2. Taková práce probíhala zejména na Fakultě kybernetiky MEPhI . VNTK "START" z Výpočetního centra Sibiřské pobočky Akademie věd SSSR vyvinul řadu procesorů Kronos s hardwarovou podporou programovacího jazyka Modula-2.
Obecně lze říci, že Modula-2 se nedočkala distribuce a uznání, které by si za své kvality zasloužila. Jazyk získal určitou popularitu v akademickém prostředí Evropy, byl mezi programátory SSSR poměrně populární, ale nedokázal prosadit svého předchůdce: nové implementace jazyka Pascal, který zahrnoval prostředky pro organizaci modulů , a později - objektové programování nástroje , vždy obcházely Modula-2 v popularitě. Systém Lilith, pro který byl Modula-2 vytvořen, nezískal širokou popularitu a nemohl pomoci Modula-2 v postupu.
Svou roli sehrála extrémně široká distribuce levných a rychlých kompilátorů Pascal od Borland International . Zajímavé je, že kompilátor Turbo Modula-2 pro CP/M OS nebyl vytvořen pouze společností Borland, ale začal se dokonce prodávat v Severní Americe a západní Evropě. Vedení společnosti, především Philippe Kahn , se však rozhodlo od vývoje tohoto systému upustit, aby nevytvořilo konkurenci mimořádně úspěšnému Turbo Pascalu . Výsledkem tohoto rozhodnutí bylo, že viceprezident společnosti Borland Nils Jensen, jeden ze zakladatelů společnosti, opustil Borland se svým vývojovým týmem v roce 1987 a koupil práva na Turbo Modula-2. JPI (Jensen & Partners International) společnost, kterou vytvořil, vydala pod značkou TopSpeed řadu kompilátorů pro procesory rodiny x86: Assembler, Modula-2, Pascal, C/C++, Ada.
V současnosti se jazyk Modula-2 používá pro programování palubního softwaru družic vypouštěných v rámci projektu GLONASS [7] . Na konci roku 2010 byl kompilátor GNU Modula-2 oficiálně zařazen do kolekce GCC [8] .
Potomkové jazyky
- Modula-3 je dalším vývojem Modula-2, který vyvinuly společně DEC a Olivetti Firms s konzultační podporou Wirth.
- Oberon je dalším vývojem Modula-2, který vytvořil Wirth v roce 1988. Oberon využívá automatickou správu paměti s garbage collection , změnil také řadu funkcí, které na základě zkušeností s používáním Modula-2 autor považoval za neúspěšné. Přidán ekonomicky implementovaný objektový subsystém. Oberon se zase stal praotcem celé větve jazyků: Oberon-07 , Oberon-2 , Component Pascal ( Component Pascal ), Active Oberon , OberonScript .
- Zonnon je jazyk vytvořený Jürgem Gutknechtem založený na Modula-2 a Active Oberon, s přidáním řady nových prvků, jak původních, tak převzatých z jiných jazyků.
- Alma-0 - Alma-0 je rozšířená (multiparadigmatická) verze imperativního jazyka Modula-2.
- Parallaxis [9] je strukturovaný programovací jazyk pro paralelní programování dat (systémy SIMD) vyvinutý Thomasem Brownlem v roce 1989. Jazyk je založen na sériovém modulu Modula-2, ale je rozšířen o nesamostatné paralelní konstrukce.
Kromě přímých potomků mnoho dalších jazyků zdědilo prvky syntaxe a obecné architektury z Modula-2 do té či oné míry. O vlivu Modula-2 se zmiňovali tvůrci tak málo podobných jazyků, jako je například Lua a Go . Vliv Modula-2 (a ve větší míře jeho potomka, jazyka Oberon) lze vysledovat v dialektech Java, C#, pozdní Pascal jako Object Pascal a Delphi.
Poznámky
- ↑ ISO/IEC 10514-1:1996
- ↑ Wirt N. Programování v jazyce Modula-2. M.: Mir, 1987;
- ↑ 1 2 Kurochkin V. M. Předmluva překladatelského editora ke knize: Wirth N. Programování v jazyce Modula-2. M.: Mir, 1987.
- ↑ 1 2 Niklaus Wirth. „Od modulu k Oberonovi“ . InfoArt (1998). Získáno 25. října 2010. Archivováno z originálu 19. září 2011. (Ruština)
- ↑ Krátký úvod do Katedry systémové matematiky. podpora CC RAS . Získáno 30. listopadu 2019. Archivováno z originálu 11. září 2019. (neurčitý)
- ↑ Koltashev A. A. Modula-2 v ruském prostoru Archivní kopie z 11. dubna 2011 na Wayback Machine
- ↑ Stránka GNU Modula-2 . Získáno 9. října 2009. Archivováno z originálu 5. října 2009. (neurčitý)
- ↑ Anglická kniha: Bräunl: Parallel Programming , Prentice-Hall, 1993
Anglická kniha: Bräunl: Parallel Image Processing , Springer-Verlag, 2001
Německá kniha: Bräunl: Parallele Programmierung , Vieweg-Verlag, 1993
Německá kniha: Bräungele Biunl: Parall -Wesley, 1995
německá kniha: Bräunl: Massiv parallele Programmierung mit dem Parallaxis-Modell , Springer-Verlag, Informatik-Fachberichte, 1990
ruská kniha: Bräunl: Parallel Programming , Vyschshaya Shkola Publishers, Kyjev, 1997
Literatura
- Wirth N. Programování v jazyce Modula-2. Překlad z angličtiny. V. A. Serebryakova , V. M. Khodukina; Ed. V. M. Kurochkina . — M.: Mir, 1987. — 222 s.
- Wirt N. Algoritmy a datové struktury (verze knihy Modula-2), Moskva, Mir, 1989, ISBN 5-03-001045-9 (ruština), 0-13-022005-1 (anglicky)
- Ruslan Bogatyrev. Kronika jazyků Pascal . PC World, #04/2001 (17. dubna 2001). Staženo: 25. října 2010. (Ruština)
- Christian K. Modula-2 Programming Guide. - M., Mir , 1989. - ISBN 5-03-001117-X - 463 s.
Odkazy