Modul-3

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 17. března 2021; ověření vyžaduje 1 úpravu .
Modul-3
Sémantika imperativní , strukturální , modulární , objektově orientovaný , generický
Jazyková třída programovací jazyk , objektově orientovaný programovací jazyk a imperativní programovací jazyk
Typ provedení sestaven
Objevil se v 1986 - 1988
Autor DEC SRC , Olivetti
Vývojář Digital Equipment Corporation
Uvolnění 5.8.6 (14. července 2010 ) ( 2010-07-14 )
Typový systém přísný, statický
Hlavní implementace CM3 , PM3 , EzM3 , HM3
Byl ovlivněn Algol , Modula-2 , Modula-2+ , Oberon , Pascal
ovlivnil C# , Java , Ocaml , Python , Nim
webová stránka module3.org

Modula-3 (Modula-3, M3) je systémový programovací jazyk , vývoj jazyka Modula-2 . Vyvinuto v DEC 's System Research Center (SRC) s Olivetti .

Vývojáři: Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow a Greg Nelson. Jazyk není široce používán v průmyslu, i když se používá v akademické sféře. Během vývoje byl jazyk silně ovlivněn jazykem Modula-2+, který pak SRC používal k psaní softwaru pro víceprocesorovou pracovní stanici DEC Firefly .

Hlavní vlastnosti Modula-3 jsou: jednoduchost, typová bezpečnost a možnost použití pro zápis systémového softwaru . Modula-3 podporuje generické programování , multitasking , automatickou správu paměti ( garbage collection ), zpracování výjimek , objektově orientované programování (včetně skrývání dat a metod). Vývojáři jazyka sledovali cíl doplnit Modula-2 o nové funkce moderních programovacích jazyků. Zároveň do jazyka nebyly zahrnuty potenciálně nebezpečné a složité funkce, jako je vícenásobná dědičnost a přetěžování operátorů .

Historie

Vývoj Modula-3 začal v roce 1986. Maurice Wilkes napsal Niklausovi Wirthovi několik nápadů na novou verzi modulu. Wilkes, který dříve pracoval pro DEC, se vrátil do Anglie a přijal práci ve výzkumném středisku Olivetti. Wirth byl v té době zaneprázdněn vývojem nového programovacího jazyka Oberon , ale neodmítl pomoc od Wilkese. Popis Modula-3 byl dokončen v srpnu 1988 a revidován v lednu 1989. Ve stejné době se objevily kompilátory od DEC SRC a Olivetti a začaly se objevovat i kompilátory od společností třetích stran.

V devadesátých letech 20. století se Modula-3 rozšířil především v akademickém prostředí jako jazyk pro výuku programování a v průmyslu se téměř nepoužíval. Důvodem by mohla být smrt DEC, hlavního vývojáře jazyka. Ve stejné době byly společností Critical Mass Corporation navrženy komerční kompilátor CM3 a integrované vývojové prostředí Reactor. V roce 2000 společnost Critical Mass ukončila činnost. Modula-3 je v současné době podporována společností Elego Software Solutions GmbH, která zdědila zdrojový kód pro kompilátor CM3 od Critical Mass. Reactor IDE bylo nyní přejmenováno na CM3 IDE a distribuováno se zdrojovým kódem. V březnu 2002 obdrželo Elego zdrojový kód pro kompilátor PM3, který byl dříve vyvinut na Ecole Polytechnique de Montreal.

Jazykové vlastnosti

Zpracování výjimek v blocích TRY ... EXCEPT ... END a TRY ... FINALLY ... END. Konstrukt EXCEPT je implementován podobně jako konstrukt CASE. Modula-3 také podporuje smyčku LOOP...EXIT...END.

Implementována podpora pro objektově orientované programování . Typ objektu je OBJECT. Tento typ se liší od záznamů (RECORD) tím, že jde o referenční typ a umožňuje vytvářet procedury spojené s typem (metody) a také podporuje přetěžování metod. Všechny metody jsou virtuální. Například konstrukce:

TYP A = OBJEKT a: CELÉ ČÍSLO; METODY p():=AP KONEC;

definuje typ objektu obsahující pole a celočíselného typu a metodu p. Procedura AP je implementací metody p a má následující podobu:

PROCEDURE AP(self: A) = ZAČÁTEK … KONEC AP;

Metoda se nazývá takto: op();, kde o je proměnná (objekt) typu A.

Konstrukce REVEAL poskytuje jednoduchý, ale velmi výkonný mechanismus pro skrytí detailů implementace objektu před klienty.

Modula-3 je jedním z mála jazyků, který vyžaduje, aby programovací jednotky importované z externích modulů byly přísně kvalifikovány. Pokud například modul A používá proměnnou x z modulu B, odkaz na tuto proměnnou by měl být zapsán v tomto tvaru: Bx Jinými slovy, Modula-3 vám neumožňuje importovat všechny objekty exportované kterýmkoli modulem. Z tohoto důvodu je téměř nemožné program zakázat přidáním nové funkce. Velký počet uživatelů může současně rozšířit program bez obav, že to povede k selhání. Modula-3 také rozlišuje mezi deklarováním podpisu metody (blok METHODS) a jeho přetížením (blok OVERRIDES).

Vlastnosti jazyka

  • Moduly se skládají z rozhraní (INTERFACE) a těla (MODULE);
  • Moduly obsahující nebezpečný kód jsou označeny klíčovým slovem UNSAFE;
  • Automatická správa paměti ( sběr odpadu );
  • Silné typy psaní , složené (RECORD) a rozšiřitelné (OBJECT) typy;
  • Zvládání výjimečných situací;
  • podpora multithreadingu;
  • Generika (GENERIC, analoga šablon C++).

Příklady

Ahoj světe! může vypadat takto:

MODUL Hlavní; IMPORTIO; ZAČÍT IO.Put("Ahoj světe\n") KONEC hlavní.

nebo takto (pomocí modulu výstupního proudu):

MODUL Ahoj EXPORTY Hlavní; IMPORT Wr, Stdio; ZAČÍT Wr.PutText(Stdio.stdout, "Ahoj světe!\n"); Wr.Close(Stdio.stdout); KONEC Dobrý den.

Některé moduly obsažené ve standardní knihovně

Podobně jako v jazyce C je většina procedur pro psaní programů v Modulu-3 implementována ve standardní knihovně. I/O operace jsou implementovány také ve standardní knihovně.

  • IO - vstupně-výstupní rozhraní.
  • Rd/Wr jsou rozhraní, která implementují toky pro čtení/zápis.
  • Text je rozhraní pro práci s řetězci (typ TEXT).
  • Word - postupy pro práci s celými čísly bez znaménka.
  • Fmt - Formátování různých typů dat pro tisk.

Standardní knihovna také obsahuje rozhraní pro práci s čísly s pohyblivou řádovou čárkou, slovníky, seznamy atd.

Nízkoúrovňové programování

Modula-3 kromě odkazů podporuje také ukazatele . Typ ADDRESS je protějškem C typu void* . Ukazatel na proměnnou typu integer by vypadal takto:

TYPE IntPtr = NETRACENÉ REF INTEGER;

Chcete-li získat adresu proměnné, použijte vestavěnou funkci ADR(), která je analogická operaci & v C. Garbage collector nesleduje ukazatele (to je označeno slovem UNTRACED). Všechny ukazatele musí být uvolněny ručně pomocí vestavěné procedury DISPOSE.

Modula-3 také podporuje všechny datové typy dostupné v jazyce C. Z tohoto důvodu lze kód Modulo-3 volně propojit s kódem C. Všechny definice typů jsou obsaženy v modulu Ctypes.

Hlavní implementace

Většina kompilátorů je Open Source.

  • DEC SRC M3 je původní překladač Modula-3 od DEC.
  • Critical Mass CM3 je nejpokročilejším nástupcem DEC SRC M3.
  • Polytechnique Montreal Modula-3 PM3 je dalším nástupcem DEC SRC M3 (nyní sloučený do CM3).
  • EzM3 je lehký nezávislý kompilátor postavený na PM3. Vyvinuto společně s CVSup
  • HM3 je nástupcem PM3 (verze 1.1.15) s podporou POSIX Threading (NPTL).

Všechny implementace podporují velké množství platforem (více než 20). Datové typy jsou binárně kompatibilní s jazyky C, což umožňuje použití těchto dvou jazyků společně.

Literatura

Některé z těchto knih lze nalézt v zahraničních internetových obchodech. Většina z nich je k dispozici zdarma na internetu.

  • Greg Nelson, ed. Systémové programování s Modula-3 Definitivní odkaz na jazyk Modula-3 se zajímavými články o konstrukci objektově orientovaného systémového softwaru a dokumentací diskuse vedoucí ke konečným rysům jazyka.
  • Samuel P. Harbison, Modula-3 Snadno použitelná třídní učebnice.
  • Robert Sedgewick, Algoritmy v Modula-3
  • Laszlo Boszormenyi & Carsten Weich, Programování v Modula-3: Úvod do programování se stylem
  • Renzo Orsini, Agostino Cortesi Programmare in Modula-3: úvod do programu imperativa ea oggetti italská kniha jazyka vysvětlující jeho hlavní rysy.

Projekty využívající Modula-3

  • Operační systém SPIN ( en ) byl napsán v Modulu-3. Rozhraní jádra jsou kompatibilní s DEC Unix.
  • CVSup  je program pro synchronizaci repozitářů, také napsaný v Module-3.

Poznámky

Odkazy