Přeskočit na obsah

Modula-2

Z Wikipedie, otevřené encyklopedie

Modula-2 je počítačový programovací jazyk který vynalezl Niklaus Wirth na ETH kolem roku 1978 jako nástupce jazyka Modula. Modula-2 byl implementován v roce 1980 pro počítač Lilith, který byl uveden na trh roku 1982 společností DISER (Data Image Sound Procesor and Emitter Receiver System) jako mC1 a mC2. DISER prodal 120 kusů po celém světě. Modula-2 vycházel podobně jako Modula z jazyka Pascal stejného autora. Jazyk byl dále ovlivněn jazykem Mesa a novými programovacími možnostmi osobního počítače Xerox Alto.

Popis

Modula-2 je procedurální jazyk velice systemově flexibilní a s širokými možnostmi uplatnění.Značná část syntaxe je založena na Wirthově starším a více známém jazyce Pascal. Modula-2 byl navržen tak, aby byl víceméně podobný s jazykem Pascal, některé prvky z něho byly odstraněny a některé z konceptu modula naopak přídány, byla přidána podpora přímé podpory pro multiprogramování.

Modul Modula-2 může být použit k zapouzdření do souboru souvisejících podprogramů a datových struktur a omezit jejich viditelnost z jiných částí programu. Programy v jazyce Modula-2 se skládají z jednotlivých modulů z nichž každý z nich se skládá ze dvou částí : definice modulu část rozhraní, které obsahuje pouze ty části subsystému, které jsou viditelné pro ostatní moduly a implementační modul, který obsahuje zdrojový kód který je uvnitř modulu a není pro ostatní moduly viditelný.

Jazyk má přísnou kontrolu oblastí. Zejména rozsah modulu může být považován za neproniknutelnou zeď : Kromě standardních identifikátorů žádný objekt z vnějšího světa není viditelný uvnitř moulu, pokud není výslovně exportován.

Předpokládejme že modul M1 má exportovány objekty a,b,c a P jako výčet identifikátorů v explicitním exportním listu

 DEFINITION MODULE M1;
   EXPORT QUALIFIED a, b, c, P;
   ...

Potom objekty a,b,c a P z modulu M1 jsou známe mimo modul M1 jako M1.a, M1.b, M1.c a M1.P. Exportní jméno objektu, tj M1, je používán jako kvalifikátor následovaný jménem objektu.

Předpokládejme modul M2 obsahující následující IMPORT deklaraci

 MODULE M2;
   IMPORT M1;
   ...

To znamená, že objekty exportované modulem M1 do svého programu nyní můžou být použity i uvnitř modulu M2. Jsou potom odkazované kvalifikovaným způsobem takto: M1.a, M1.b, M1.c, a M1.P. Například:

   ...
   M1.a := 0; M1.c := M1.P (M1.a + M1.b);
   ...

Kvalifikovaný export zabraňuje střetům ve jménech: Například, pokud by jiný modul M3 měl také exportovaný objekt nazvaný P, pak můžeme ještě rozlišit dva objekty, protože M1.P se liší od M3.P Díky kvalifikovanému exportu to nevadí že oba objekty se jmenují P uvnitř jejich exportního modulu M1 a M3.

Je k dispozici i jiná alternativní technika, kterou používá velké množství programátorů. Předpokládejme modul M4 formulovaný takto

 MODULE M4;
   FROM M1 IMPORT a, b, c, P;

Potom to znamená že objekty exportované modulem M1 do programu můžou být znovu použity uvnitř modulu M4, ale ted pouhými odkazy na exportované identifikátory "nekvalifikovaným" způsobem jako: a, b, c, and P. Příklad:

   ...
   a := 0; c := P (a + b);
   ...

Tato technika nekvalifikovaného importu umožňuje používat proměnné a jiné objekty i mimo jejich exportní modul stejně jednoduše, t.j. nekvalifikovanýmzpůsobem jako uvnitř exportního modulu. Mezi moduly teď není žádná "zeď"pro všechny objekty u nichž to není výslovně povoleno. Samozřejmě nekvalifikovaný import je možný pouze v tom případě že nedochází k žádnému střetu jmen.

Verze

Existují dvě hlavní verze Modula-2. První je PIM, pojmenovaný po knize "Programování v Modula-2" (Programming in Modula-2) od Niklaus Wirth Takto vznikly druhá,třetí (opravená) a čtvrtá verze, z nichŽ každá popisuje mírné odlišnosti jazyka. Druhou hlavní verzí je ISO od Mezinárodní organizace pro normalizaci.


  • PIM2 (1983)
    • Povinné explicitní EXPORT klauzole v definici modulů.
  • PIM3 (1985)
    • Odstraněna EXPORT klauzole z definicí modulů.
  • PIM4 (1989)
    • Specifikováno chování MOD a REM operátorů když jsou jejich operandy záporné a ujasněno že "pole charů" musí být vždy ukončeno znakem nula.
  • ISO (1996)
    • ISO Modula-2 vyřešila většinu nejednoznačností v PIM Modula-2. Byly přidány data typu COMPLEX a LONGCOMPLEX, vyjímky, a přidány kompletní I/O standardní knihovny.

Jazykové prvky

Vyhrazená slova

PIM3 obsahuje následujících 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

Hello Word

Ukázka jednoduchého programu, který na obrazovku vypíše "Hello word":

MODULE PrintHelloWorld;

(*This program prints "Hello world!" on the standard output device*)

FROM InOut IMPORT WriteString, WriteLn;

BEGIN
	WriteString('Hello world!');
	WriteLn;
END PrintHelloWorld.


Související jazyky

Přestože Modula-2 je zdaleka nejznámější a nejrozšířenější varianta, existuje i několik jazyků, které jsou spojené tím či oním způsobem: Modula,Modula-2+, Modula-2*, ISO Modula-2, Modula-3, Oberon, Oberon-2 a řada dalších.

Modula-2 byl vyvynut jako systémový jazyk pro Lilith stanici a ttvořil předchůdce pro jazyk Oberona pracoviště projektu (systému Oberon) vyvynutý na ETH Zürich. Mnoho současných jazyků přijalo rysy Modula-2.

Modula-GM

Delco Electronics, potom dceřinná společnost GM Hughes Electronics, vyvinula verzi Modula-2 pro vestavěné systémy kontroly v roce 1985. Pojmenovali jej Modula-GM.Byl to první vyšší programovací jazyk používaný k nahrazení strojového kódu pro vestavění systémy v jednotkách řízení motorů (ECUs). To bylo nesmírně významné, protože Delco vyráběla více než 28000 ECU / den v roce 1988 pro GM, které se stalo největším producentem ECU. První experimentální používání Modula-GM ve vloženém řadiči bylo v roce 1993 Gen-4 ECU používané pro CART (Championchip Auto racing Teams) a IRL (Indy Racing League) týmy.

Aktuální překladače

Překladače s ukončeným vývojem

  • Benchmark Modula-2 for the Amiga
  • Borland Turbo Modula-2 pro CP/M (abandonware)
  • Borland Turbo Modula-2 pro MS-DOS (prodána Jensen and Partners, nyní TopSpeed Modula-2)
  • epc Modula-2 (od bývalého Edinburgh Portable Compilers Limited; společnost už neexistuje, nyní je součást Analog Devices)
  • FTL Modula-2 (v1.15 1986) pro MS-DOS, ATARI ST a CP/M Z80 autor Dave Moore, Cerenkof Computing. Distribuované v Austrálii firmou JED Microprocessors Pty Ltd.
  • Logitech měl řadu kompilátorů Modula-2 pro CP/M a MS-DOS
  • M2F pro Linux, předchůdce na GNU Modula-2, generuje i386 kód, kompatibilní s PIM2 (GPled)
  • M2S pro Amigu
  • M2SDS (IBM PC), Interface Technologies Inc. (ITC) Houston, TX.
  • Megamax Modula-2 pro Atari ST & TT computers. Pouze v německém jazyce. Dokumentace i zdrojové kódy jsou nyní dostupné zdarma ale nejsou příliš užitečné, protože většina je jich napsána v kódu assembler 68k.
  • Metrowerks' první produkty byly kompilátory Modula-2 pro velké množství platform, včetně Macintosh
  • Modula Corporation měl řadu kompilátorů Modula-2 pro MS-DOS (M2M-PC), Apple II a Macintosh
  • Modula-2 PC (IBM PC), PCollier Systems, Tucson, AZ.
  • Mosys Modula-2 System pro Sage / Stride 68000 computers. Brian Kirk, Robinson Systems Ltd. UK
  • Stony Brook Modula-2
  • TDI Modula-2 pro Amigu a Atari ST
  • TopSpeed (aka Clarion, aka JPI, aka Jensen and Partners) měl několik dobrých 16-bit kompilátorů Modula-2, s pěkným IDEs. něco ve stylu "Turbo Pascal" z Modula-2. Trošku nestandardní, ale velice populární v podnikání i ve vzdělávání, vynikající toolchain. V současné době součástí Clarion ve vlastnictví SoftVelocity
  • Volition Systems Modula-2 (UCSD p-System). Randy Bush, Richard Gleaves, Volition Systems Del Mar, CA.

Knihy


Externí odkazy