Modula-2

Modula-2
Nyelvóra kötelező , strukturált , moduláris , adatok és módszerek elrejtése
Megjelent 1978
Szerző Niklaus Wirth
Típusrendszer statikus , erős
Főbb megvalósítások

ETH Zurich (készítő: Niklaus Wirth ), Gardens Point , p1 ,

Natív XDS-x86 , gm2 (GNU Modula-2)
Dialektusok PIM2, PIM3, PIM4, ISO
Befolyásolva Pascal , Mesa , ALGOL , Simula-67
befolyásolta Modula-3 , Oberon , Ada , Fortran 90 , Lua , Zonnon , Modula-GM

A Modula-2 (Modula-2) egy általános célú programozási nyelv , amely a Pascal továbbfejlesztése, amelyet Niklaus Wirth fejlesztett ki 1978 -ban .

A nyelvfejlesztés céljai és alapelvei

A Modula-2 nyelvet Niklaus Wirth fejlesztette ki, hogy rendszerszoftvert hozzon létre a Lilith számítógéphez ., melynek fejlesztése 1977 - ben kezdődött a zürichi Informatikai Intézetben . Ez meghatározza számos jellemzőjét. A nyelvet eredetileg ipari rendszerprogramozási eszköznek tervezték, amellyel megbízható, érthető, karbantartható programok írhatók. Ugyanakkor a nyelvnek magas szintű nyelv marad , erős gépeléssel és minden megbízható programozási eszköz támogatásával, de lehetővé kell tennie a hardver közvetlen elérését, speciális rendszerprogramok létrehozását , például megszakításkezelőket és eszközillesztőket , valamint támogatást. párhuzamosan futó kölcsönható folyamatok programozása .

A Modula-2 közvetlen őse a Modula nyelv volt , amelyet Wirth hozott létre az 1970-es évek első felében Pascal alapján . A fő kiegészítés, amely a nyelv nevében is tükröződik, az volt, hogy a programot modulokra osztották fel - külön kódrészletekre, amelyek kifejezetten leírt interfészeken keresztül működnek együtt. A szintaxist is újratervezték, és párhuzamos programozási eszközöket adtak hozzá. A Modula egyetlen kísérleti megvalósítása 1975 -ben jelent meg . A modul a Modula-2 kezdeti verziójának, egyfajta „alfa verziójának” tekinthető, szintaktikailag ez a két nyelv nagyon közel áll egymáshoz. Ráadásul Wirth szerint a Modula-2-re a Mesa nyelv hatása volt., amelyet a Xerox PARC fejlesztett ki .

Általános jellemzők

A Modula-2 nyelv egy strukturális , moduláris programozási nyelv , amelynek szintaxisa a Pascal nyelven alapul, de észrevehetően átdolgozva és továbbfejlesztve. Főbb jellemzőit az alábbiakban ismertetjük.

A nyelv szerkezete egyszerű - mindössze 40 fenntartott szót tartalmaz (összehasonlításképpen Adában 63 van); a Modula-2 átfogó leírását tartalmazó hivatalos „Nyelvi Jelentés” 40 oldal (a PL / 1 rövidített változatának teljes leírása körülbelül 200 oldalt vesz igénybe).

Szintaxis jellemzők

A Modula-2 jellemzőit a legegyszerűbben úgy írhatjuk le, ha összehasonlítjuk a Pascal nyelvvel. A legfontosabb különbségek a modulok bevezetésén és a kezelt leírás-exportálási mechanizmusokon kívül a következők.

IF THEN feltétel ELSIF utasítások THEN feltétel ELSIF utasítások THEN feltétel ... ELSE utasítások END utasítások

Ezzel megszűnt az összetett utasítások BEGIN-ENDés az IF-utasítás „létra” folyamatos használata a többlépcsős állapotvizsgálathoz.

  • Cikkeket WHILE, valamint FORegy törzset is biztosít egy utasításkészletből, és a fenntartott szóval végződik END.
  • Feltétel nélküli hurok hozzáadva LOOP-END.
  • Mind az eljárások , mind a függvények a kulcsszóval vannak deklarálva PROCEDURE.
  • Előre meghatározott típusú BITSET bit mező hozzáadva .
  • A GOTO feltétel nélküli ugrás operátor eltávolítva a nyelvből .
  • Bekerült egy procedurális típus, amely lehetővé teszi eljárások és függvények hozzárendelését a változókhoz. Később ez a funkció bekerült a Pascalba, ahol eredetileg nem volt elérhető.

Dialektusok

A Modula-2-nek két fő dialektusa van. Az első - PIM (Niklaus Wirth "Programozás a Modula-2-ben" című könyvének címe után, ahol részletes leírást kapott a nyelvről és a fő rendszerkönyvtárakról) három fő változatban létezik, amelyek egymás után jelentek meg, és minimálisan különböznek egymástól. . A második nagy dialektus az ISO , amelyet a Nemzetközi Szabványügyi Szervezet szabványosított. Az alábbiakban felsoroljuk a nyelvjárások és az eredeti nyelvleírás közötti főbb különbségeket.

  • PIM2 (1983)
    • Megköveteli az EXPORT direktíva kötelező használatát a definíciós modulban.
    • A SIZE függvény egy könyvtárfüggvény, és importálni kell a SYSTEM modulból .
  • PIM3 (1985)
    • Eltávolította az EXPORT direktívát a definíciós modulokból. A változtatást az indokolta, hogy a definíciós modul teljes tartalma exportálva van, így az EXPORT használata felesleges.
    • A MÉRET funkció előre definiált (bárhol elérhető a programban, importálás nélkül).
  • PIM4 (1988)
    • Tisztázta a MOD művelet viselkedését negatív operandusok esetén.
    • Követelmény hozzáadva, hogy minden ARRAY OF CHAR -ként deklarált karakterláncnak null-végződésűnek kell lennie (ASCII NUL), még akkor is, ha a karakterlánc a teljes tömböt fedi le.
  • ISO [1] (1996 és 1998)
    • Hozzáadott adattípusok COMPLEX és LONGCOMPLEX .
    • Kivételek hozzáadva.
    • Hozzáadott egy konstrukciót a FINALLY modullezáró kódhoz .
    • Teljesen szabványosított I/O könyvtár.
    • Olyan pontosítások történtek, amelyek az eredeti leírás legtöbb kétértelműségét kiküszöbölték, sok kisebb javítás, pontosítás történt.

Előnyök és hátrányok

Határozottan elmondható, hogy a Modula-2 nyelv a Pascal pozitív tulajdonságainak megőrzése mellett számos olyan tulajdonsággal rendelkezik, amelyek sokkal erősebbé teszik a nyelvet, és jobban alkalmas rendszer- és alkalmazásprogramozásra . A Modula-2 fő előnyei a modern strukturális programozási nyelvekkel szemben a következők [2] :

  • A nyelvdefiníció egyszerűsége és rövidsége. Egy teljes szintaktikai definíció az RBNF jelölésben kevesebb, mint 3 oldalt, a teljes szintaktikai diagramok  12 oldalt vesz igénybe, a hivatalos "nyelvről szóló üzenet" 40 oldalas, ami szinte abszolút minimum egy ilyen képességekkel rendelkező univerzális nyelvhez. Összehasonlításképpen, az ada nyelv hivatalos teljes meghatározása 400 géppel írt oldal.
  • Egyszerű, logikus és egységes szintaxis, mentes a redundáns szerkezetektől és a helyesírási hibákat kiváltó elemektől. A Modula-2 az első direktíva programozási nyelv, amely megszünteti a GOTO utasítást .
  • Egy jól átgondolt mechanizmus a program fordítási egységekre (modulokra) történő felosztására kifejezetten leírt interfészekkel és teljesen ellenőrzött importálással, amely lehetővé teszi a teljes modulok és az egyes elemek importálását, mind minősített (a modulnévvel), mind pedig minősítetlen lehetőséggel. az importált objektumok nevének használata.
  • A bemeneti-kimeneti lehetőségek, valamint a legtöbb szabványos eljárás és funkció nyelvből való kizárása, és szabványos modulként kialakított könyvtárakba való áthelyezése, ami leegyszerűsíti a nyelvet és a fordítót, és teljes szabadságot ad a megvalósítónak a szabványos eljárások és funkciók használatában. megvalósítani.
  • Alacsony szintű programozási mechanizmusok beépítése a nyelvbe, ideértve a memória közvetlen manipulálását és a nem tipizált adatok és mutatók, amely lehetővé teszi a hagyományosan assemblerben írt alacsony szintű programok többségének magas szintű nyelven való írását, pl. mint meghajtók és megszakításkezelők .
  • A párhuzamos programozás elemi eszközeinek elérhetősége, úgy megválasztva, hogy garantálják azok megfelelő megvalósítását mind fizikailag többprocesszoros platformokon, mind időmegosztásos platformokon.
  • A nyelv létrejötte szempontjából jelentős volt a procedurális típus megjelenése, és ennek megfelelően azok a változók, amelyekhez dinamikusan eljárásokat lehet rendelni.

A nyelv hátrányai közé tartozik:

  • A párhuzamos programozási mechanizmusok gyengesége , különös tekintettel a párhuzamos folyamatok interakciójának megszervezésére. Ezeknek az eszközöknek a megvalósítása a rendszerkönyvtárak felé tolódik el, és a standard könyvtár csak a legegyszerűbb párhuzamosításvezérlő eszközöket tartalmazza. A Modul-2 párhuzamos programja, amely ezeket a korlátokat meghaladó párhuzamossági vezérlőket használ, automatikusan elveszíti a hordozhatóságát. [3]
  • Az absztrakt típusok emlékezethez való leképezésének kezelésére szolgáló mechanizmusok hiánya . [3]
  • A helyi modulok támogatása szükségtelenül bonyolítja a fordítót. A beágyazott modulok használatának oka a hatókör korlátozása és a program kiemelt részei kiemelése a párhuzamos feldolgozás során történő szinkronizálás érdekében, de más, egyszerűbb és kézenfekvőbb módon is megvalósíthatók. [négy]
  • Az explicit felosztás megvalósítási modulra és definíciós modulra ellentmondásos döntés. Ez megnehezíti a fordító munkáját, és arra kényszeríti a programozót, hogy szinkronizálja a különböző fájlok változásait. Megjegyzendő, hogy a Modula-2 leszármazottjában - az Oberonban - az ilyen szétválasztást elhagyták, ehelyett egyetlen programmodulban az exportált elemeket (amelyek a modul interfészt alkotják) egyszerűen speciális módon megjelölik. [négy]

Megjegyzendő továbbá, hogy a 2. modulból hiányzik számos, a létrehozása idején ismert és népszerű tulajdonság, amelyek a nyelv előnyeinek és hátrányainak egyaránt betudhatók, az adott kritikus nézőpontjától függően:

Használat

A Szovjetunióban a Modula-2 első fordítói 1982-83-ban jelentek meg az SM-4 és Elektronika-60 számítógépekhez. A BESM-6 fordítóját a Szovjetunió Tudományos Akadémia Számítástechnikai Központjában fejlesztették ki ( V.A. Serebryakov , V.G. Lyuty, A.N. Bezdushny) [5] . Ezzel párhuzamosan programozási technológiákat fejlesztettek ki, és elkészültek az első Modul-2-re épülő alkalmazott programcsomagok. Ilyen munkát különösen a MEPhI Kibernetikai Karán végeztek . A Szovjetunió Tudományos Akadémia Szibériai Fiókjának Számítástechnikai Központjának VNTK "START"-ja egy sor Kronos processzort fejlesztett ki hardver támogatással a Modula-2 programozási nyelvhez.

Általánosságban elmondható, hogy a Modula-2 nem kapta meg azt a terjesztést és elismerést, amelyet minőségei miatt megérdemelt volna. A nyelv bizonyos népszerűségre tett szert az európai akadémiai környezetben, meglehetősen népszerű volt a Szovjetunió programozói körében, de nem tudta megnyomni elődjét: a Pascal nyelv új implementációi, amelyek magukban foglalták a modulok szervezésének eszközeit , majd később az objektumprogramozást . eszközök , népszerűsége mindig megkerülte a Modula-2-t. A Lilith rendszer, amelyre a Modula-2-t létrehozták, nem kapott széles körű népszerűséget, és nem tudta segíteni a Modula-2 előrehaladását.

A Borland International olcsó és gyors Pascal fordítóinak rendkívül széles terjesztése játszotta szerepet . Érdekesség, hogy a CP/M OS-hez készült Turbo Modula-2 fordítót nem csak a Borland készítette, de még Észak-Amerikában és Nyugat-Európában is forgalomba került. A cég vezetése, elsősorban Philippe Kahn azonban úgy döntött, hogy felhagy a rendszer fejlesztésével, nehogy versenytársa legyen a rendkívül sikeres Turbo Pascalnak . Ennek a döntésnek az eredménye, hogy a Borland alelnöke, Nils Jensen, a cég egyik alapítója 1987-ben fejlesztőcsapatával együtt elhagyta a Borlandot, és megvásárolta a Turbo Modula-2 jogait. Az általa létrehozott JPI (Jensen & Partners International) cég TopSpeed® márkanév alatt egy sor fordítóprogramot adott ki x86 család processzorokhoz: Assembler, Modula-2, Pascal, C/C++, Ada.

Jelenleg a Modula-2 nyelvet használják a GLONASS projekt [7] részeként felbocsátott műholdak fedélzeti szoftverének programozására . 2010 végén a GNU Modula-2 fordító hivatalosan is bekerült a GCC gyűjteményébe [8] .

Leszármazott nyelvek

  • A Modula-3  a Modula-2 továbbfejlesztése, amelyet a DEC és az Olivetti Firms közösen fejlesztett ki a Wirth tanácsadói támogatásával.
  • Az Oberon  a Modula-2 továbbfejlesztése, amelyet Wirth készített 1988-ban. Az Oberon automatikus memóriakezelést használ a szemétgyűjtéssel , emellett számos olyan funkciót is megváltoztatott, amelyeket a Modula-2 használatának tapasztalatai alapján a szerző sikertelennek ítélt. Hozzáadott gazdaságosan megvalósított objektum alrendszer. Az Oberon pedig a nyelvek egész ágának őse lett: Oberon-07 , Oberon-2 , Component Pascal ( Component Pascal ), Active Oberon , OberonScript .
  • A Zonnon  egy olyan nyelv, amelyet Jürg Gutknecht hozott létre a Modula-2 és az Active Oberon alapján, számos új elem hozzáadásával, eredeti és más nyelvekből kölcsönzött elemekkel.
  • Alma-0  – Az Alma-0 a Modula-2 imperatív nyelvének kiterjesztett (többparadigmás) változata.
  • A Parallaxis [9]  egy strukturált programozási nyelv párhuzamos adatprogramozáshoz (SIMD rendszerek), amelyet Thomas Brownle fejlesztett ki 1989-ben. A nyelv a soros Modula-2-n alapul, de nem önálló párhuzamos konstrukciókkal bővítve.

A közvetlen leszármazottakon kívül sok más nyelv is örökölte a szintaxis és az általános architektúra elemeit a Modula-2-ből ilyen vagy olyan mértékben. A Modula-2 hatását olyan kis hasonló nyelvek alkotói említették, mint például a Lua és a Go . A Modula-2 (és nagyobb mértékben leszármazottja, az Oberon nyelv) hatása nyomon követhető a Java, C#, késő Pascal dialektusokban, mint például az Object Pascal és a Delphi.

Jegyzetek

  1. ISO/IEC 10514-1:1996
  2. Wirt N. Programozás a Modula-2 nyelven. M.: Mir, 1987;
  3. 1 2 Kurochkin V. M. A fordítószerkesztő előszava a könyvhöz: Wirth N. Programozás a Modula-2 nyelven. M.: Mir, 1987.
  4. 1 2 Niklaus Wirth. "Modulustól Oberonig" . InfoArt (1998). Letöltve: 2010. október 25. Az eredetiből archiválva : 2011. szeptember 19..
  5. Rövid bevezető a Rendszermatematika Tanszékhez. a CC RAS ​​támogatása . Letöltve: 2019. november 30. Az eredetiből archiválva : 2019. szeptember 11.
  6. Koltasev A. A.  Modula-2 az orosz űrben A Wayback Machine 2011. április 11-i archív példánya
  7. GNU Modula-2 oldal . Letöltve: 2009. október 9. Az eredetiből archiválva : 2009. október 5..
  8. Angol könyv: Bräunl: Parallel Programming , Prentice-Hall, 1993
    Angol könyv: Bräunl: Parallel Image Processing , Springer-Verlag, 2001
    Német könyv: Bräunl: Parallele Programmierung , Vieweg-Verlag, 1993
    Német könyv: Bräunl , Addarbeitung -Wesley, 1995
    Német könyv: Bräunl: Massiv parallele Programmierung mit dem Parallaxis-Modell , Springer-Verlag, Informatik-Fachberichte, 1990
    Orosz könyv: Bräunl: Parallel Programming , Vyschshaya Shkola Publishers, Kijev, 1997

Irodalom

Linkek