Oz (programovací jazyk)

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é 29. září 2017; kontroly vyžadují 5 úprav .
Oz
Sémantika funkční, procedurální, deklarativní, objektově orientované, omezené výpočty, H-modely, paralelní výpočty
Jazyková třída programovací jazyk , omezující programovací jazyk [d] a programovací jazyk s více paradigmaty
Typ provedení sestaven
Objevil se v 1991
Autor Gert Smolka a jeho studenti
Uvolnění Oz 1.4.0
Mozart 2.0.1 (5. září 2018 ) ( 2018-09-05 )
Hlavní implementace Mozart
Byl ovlivněn Prolog
ovlivnil Alice
Licence licence MIT
webová stránka mozart.github.io

Oz  je vzdělávací programovací jazyk na vysoké úrovni , který kombinuje funkční , procedurální a deklarativní sémantiku .

Historie vývoje

Vývoj programovacího jazyka Oz zahájil v roce 1991 profesor Gert Smolka se svými studenty z Laboratoře programovacích systémů Katolické univerzity v Lovani v Belgii. V roce 1996 se do procesu vývoje zapojili Seif Haridi a Peter Van Roy ze Švédského institutu počítačových věd a použili tento jazyk ve své klasické učebnici Concepts, Techniques, and Models of Computer Programming [1] . Od roku 1999 do roku 2005 byl jazyk vyvíjen pod vedením mezinárodní výzkumné skupiny (Mozart Consortium), skládající se ze tří univerzit: Sárské univerzity , Švédského institutu informatiky (Švédský institut počítačových věd) a Katolické univerzity v Lovani .

Mozart , vysoce kvalitní open source implementace jazyka Oz, obsahuje IDE založené na rozšíření editoru Emacs , kompilátor , debugger , profiler a další nástroje.

Řízení vývoje programovacího systému Mozart v roce 2005 bylo převedeno na vývojovou skupinu (Mozart Board), aby přilákala širší okruh výzkumníků. Tento systém byl vydán Mozart Consortium pod svobodnou licencí a následně portován (portován) na nejpopulárnější operační systémy , včetně Unix , FreeBSD , Linux , Microsoft Windows a Mac OS X.

Vlastnosti jazyka

Programovací jazyk Oz zahrnuje většinu konceptů populárních programovacích paradigmat , včetně logického, funkčního ( líného i energického počítání), imperativního, objektově orientovaného programování s omezením, distribuovaného a paralelního programování. Na jedné straně má Oz jednoduchou formální sémantiku a na druhé straně je pro něj vytvořena efektivní softwarová implementace.

Mezi hlavní výhody tohoto jazyka patří podpora pro multiparadigmatické programování, programování s omezeními a distribuované programování. Na úrovni jazykových konstrukcí je tak podporována jednoduchá a přirozená paralelizace a distribuce výpočtů po síti, což usnadňuje vytváření aplikací odolných proti chybám. Pro implementaci omezovacího programování v jazyce Oz je zaveden koncept výpočetních prostorů, ve kterých se hledá řešení. To umožňuje řešit problémy matematického programování a zejména problémy diskrétní optimalizace.

Přehled jazyků

Datové struktury

Jádro jazyka tvoří několik základních datových struktur, ale může být rozšířeno o to, co je známé jako syntaktický cukr .

Základní datové struktury:

'|'(2 '|'(4 '|'(6 '|'(8 nula)))) 2|(4|(6|(8|nula))) % syntaktického cukru 2|4|6|8|nula % je ještě kratší [2 4 6 8] % efektivní využití syntaktického cukru k implementaci stručné syntaxe

Tyto hodnoty jsou konstantní entity prvního druhu (první třída), zatímco psaní je dynamické.

Funkce

Funkce jsou entity prvního druhu , což nám umožňuje aplikovat paradigma funkcionálního programování:

zábava {Fact N} % faktoriál pokud N =< 0, pak 1 jinak N*{Fakt N-1} konec konec zábava {Comb NK} % počet kombinací {Fact N} div ({Fact K} * {Fact NK}) % celých čísel může být libovolně velké konec fun {SumList List} % součtu prvků seznamu případ Seznam nula pak 0 [] H|T pak H+{SumList T} % shoda vzoru pro seznam konec konec

Proměnné vlákna a deklarativní souběžnost

Pokud program narazí na nesvázanou proměnnou, počká, dokud nebude proměnné přiřazena hodnota:

vlákno Z = X+Y % čeká, až proměnné X a Y získají hodnoty {Procházet Z} % zobrazí hodnotu Z konec závit X = 40 konec závit Y = 2 konec

Není možné změnit hodnotu proměnné proudu, která má k ní přidruženou hodnotu:

X=1 X = 2% chyba

Proměnné vláken usnadňují vytváření agentů, kteří běží v paralelních vláknech:

zábava {Ints N Max} pokud N == Max, pak nula jiný {Zpoždění 1000} N|{Ints N+1 Max} konec konec zábava {Sum S Stream} případ Proud nuly, pak S [] H|T pak S|{Součet H+ST} konec konec místní XY in vlákno X = {Ints 0 1000} konec závit Y = {Součet 0 X} konec {Procházet Y} konec

Vzhledem k tomu, jak fungují proudové proměnné, můžete kdekoli v programu používat vlákna, u kterých je zaručeno, že vrátí stejný výsledek, což usnadňuje paralelní programování. Vlákna zároveň spotřebovávají velmi málo systémových prostředků: stejně jako v Erlangu může současně běžet 100 000 vláken [2] .

Ukázkové programy v zemi Oz

Eratosthenovo síto

Tento příklad počítá proud prvočísel pomocí síta podle Eratosthenova algoritmu. Chcete-li to provést, rekurzivně vytvořte paralelní proudy, které odfiltrují složená čísla:

zábava {Sieve Xs} případ Xs nula pak nula [] X|Xr pak Ys in vlákno Ys = {Filtr Xr zábava {$Y} Y mod X \= 0 konec} konec X|{Sieve Ys} konec konec

Líné hodnocení

Ve výchozím nastavení používá Oz model horlivého hodnocení, ale také podporuje takzvané líné hodnocení:

zábavný líný {Fakt N} pokud N =< 0, pak 1 jinak N*{Fakt N-1} konec konec místní XY in X = {Fact 100} Y = X + 1 %, protože je požadována hodnota X, je v tuto chvíli vypočtena konec

Předávání zprávy

Deklarativní model souběžnosti lze rozšířit pomocí mechanismu předávání zpráv:

prohlásit místní Stream Port v Port = {NewPort Stream} {Odeslat port 1} % streamu je nyní 1|_ ('_' označuje nevázanou a nepojmenovanou proměnnou) {Odeslat port 2} % streamu je nyní 1|2|_ ... {Odeslat port n} % Stream je nyní 1|2| .. |n|_ konec

Vytváření asynchronních agentů je implementováno pomocí vláken a portů:

zábava {NewAgent Init Fun} Msg Out in vlákno {FoldL Msg Fun Init Out} konec {NewPort Msg} konec

Stavy a objekty

Deklarativní souběžný model lze rozšířit tak, aby podporoval koncepci stavového a objektově orientovaného programování; k tomu je třeba vytvořit datovou strukturu Cells, jejíž hodnotu lze změnit:

místní AX in A = {NewCell 0} A := 1 % změní hodnotu A na 1 X = @A % @ se používá pro přístup k hodnotě A konec

S tímto mírným rozšířením sémantiky můžete využít plnou sílu objektově orientovaného programování:

třídy Counter attr-val meth init (hodnota) val:=Hodnota konec pervitin procházet {Procházet @val} konec meth vč. (hodnota) val :=@val+hodnota konec konec místní C in C = {New Counter init(0)} {C inc(6)} {C procházet} konec

Příklad programu Oz, který řeší rébus

Stav:

CHODIDLO +BOL --- HRA Kde I=0 a všechna různá písmena znamenají různá čísla.

Řešení:

místní Foot Res in proc {Fut C} F#U#T#B#O#L#G#R#A = C v C ::: 0#9 {FD.distinct C} F \=: 0 B \=: 0 100*F+10*U+T+100*B+10*O+L=: 100*G+10*R+A {FD.distribute ff C} konec {SearchAll Foot Res} {Browse Res} konec

ukáže všechna řešení tohoto rébusu ve formě tabulky.

Viz také

Poznámky

  1. Koncepty, techniky a modely počítačového programování . Získáno 30. listopadu 2010. Archivováno z originálu 26. srpna 2014.
  2. Mozart-oz.org Souběžnost (odkaz není k dispozici) . Datum přístupu: 30. listopadu 2010. Archivováno z originálu 24. února 2015. 

Odkazy