Modula-2
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 vyditelné 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ě standartní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 "vesmíru" 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 is formulovaný takto
MODULE M4; FROM M1 IMPORT a, b, c, P;
Potom to znamená že objekty exportované modulem M1 do "vesmíru" 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 standartní 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, vyvynula 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 nesírně významné, protože Delco vyrábely 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 byl 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
- ACK Modula-2 pro Minix 2.0 (freeware)
- Cambridge Modula-2 pro různé regulátory a MINOS operační systémy (komerční + proprietární software)
- Canterbury Modula-2 generuje zdrojový kód v jazyce Java
- DEC Modula-2 pro BSD a Ultrix, oba VAX a MIPS (freeware)
- FST Modula-2 pro MS-DOS (freeware)
- Gardens Point Modula-2 pro BSD, Linux, OS/2, Solaris a .NET - ISO kompatibilní (freeware)
- GNU Modula-2 compiler pro GCC platformy, PIM kompatibilní
- M2Amiga pro Amigu (free software)
- M2M autor N. Wirth z ETH Zurich, platformě nezávislý, generuje M-kód pro virtuální stroj (freeware)
- MacMETH autor N. Wirth z ETH Zurich pro Macintosh, ale pouze Classic (freeware)
- Mod51 pro řadu mikroprocesorů Intel 80x51
- ModulaWare pro OpenVMS, VAX a Alpha, ISO kompatibilní
- MTC překladač z Modula-2 do C, dostupný v Modula-2 a C zdrojových kódech (free software)
- Native XDS-x86 pro Windows a Linux, ISO kompatibilní Modula-2 a Oberon-2, nativní kompilátory s volitelným TopSpeed Compatibility Pack (freeware)
- p1 Modula-2 pro Macintosh, a to jak Classic i Mac OS X ale bez Cocoa podpory, ISO kompatibilní * The Karlsruhe Modula-2 Compiler MOCKA pro různé platformy, PIM kompatibilní freeware Linux/BSD versions)
- TERRA M2VMS pro OpenVMS, jak VAX tak i Alpha, PIM kompatibilní
- The Ulm Modula-2 System pro Solaris, jak SPARC tak i MC68K (free software, GPLed)
- XDS-C pro Windows a Linux, generuje ANSI nebo K&R C zdrojový kód většinou 16- a 32-bitová platforma, ISO kompatibilní Modula-2 a Oberon-2 s možností TopSpeed Compatibility Pack (freeware)
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 nestandartní, 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
- K. N. King, Modula-2, komplexní a jasně psaný text, i po dvaceti letech neustále v prodeji, ISBN 0-669-11091-4
- Richard J. Sutcliffe, "Modula-2: Abstractions for Data and Programming Structures," (používá ISO-Standard Modula-2) 2004-2005 Edice
Externí odkazy
- Modula-2 Internet directory
- The Modula-2 website ring
- Modula-2 FAQ autor Rick Sutcliffe, verze z 2005.09.09
- Lilith and Modula-2
- Free Modula-2 Pages News Portal
- Sources Store for Modula-2 and Oberon-2