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.

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í.

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

  1. ISO/IEC 10514-1:1996
  2. Wirt N. Programování v jazyce Modula-2. M.: Mir, 1987;
  3. 1 2 Kurochkin V. M. Předmluva překladatelského editora ke knize: Wirth N. Programování v jazyce Modula-2. M.: Mir, 1987.
  4. 1 2 Niklaus Wirth. „Od modulu k Oberonovi“ . InfoArt (1998). Získáno 25. října 2010. Archivováno z originálu 19. září 2011.
  5. 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.
  6. Koltashev A. A.  Modula-2 v ruském prostoru Archivní kopie z 11. dubna 2011 na Wayback Machine
  7. Stránka GNU Modula-2 . Získáno 9. října 2009. Archivováno z originálu 5. října 2009.
  8. 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

Odkazy