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 ) |
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ů .
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.
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).
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.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ě.
Standardní knihovna také obsahuje rozhraní pro práci s čísly s pohyblivou řádovou čárkou, slovníky, seznamy atd.
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.
Většina kompilátorů je Open Source.
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ě.
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.
Programovací jazyky | |
---|---|
|