Oz (programovací jazyk) - Oz (programming language)
Paradigma | multi-paradigma: logika, funkční, rozkazovací způsob, objektově orientovaný, omezení, distribuováno, souběžně |
---|---|
Navrhl | Gert Smolka, jeho studenti |
Vývojář | Mozartovo konsorcium |
Poprvé se objevil | 1991 |
Stabilní uvolnění | Oz 1.4.0 (final), Mozart 2.0.1 / 5. září 2018 |
Psací disciplína | dynamický |
Licence | MIT X11[1] |
webová stránka | mozart |
Hlavní, důležitý implementace | |
Programovací systém Mozart | |
Dialekty | |
Oz, Mozart | |
Ovlivněno | |
Erlang, Lisp, Prolog | |
Ovlivněno | |
Alice, Scala |
Oz je multiparadigmový programovací jazyk, vyvinutý v laboratoři programovacích systémů v Université catholique de Louvain, pro programovací jazykové vzdělávání. Má kanonickou učebnici: Koncepty, techniky a modely počítačového programování.
Oz poprvé navrhl Gert Smolka a jeho studenti v roce 1991. V roce 1996 pokračoval vývoj Oz ve spolupráci s výzkumnou skupinou Seif Haridi a Peter Van Roy na Švédský institut výpočetní techniky. Od roku 1999 byl Oz neustále vyvíjen mezinárodní skupinou, Mozartovým konsorciem, které původně sestávalo Sárská univerzita, Švédský institut výpočetní techniky a Université catholique de Louvain. V roce 2005 byla odpovědnost za řízení vývoje Mozarta přenesena na základní skupinu, Mozart Board, s výslovným účelem otevřít vývoj Mozarta větší komunitě.
Mozartův programovací systém je primární implementací Oz. Vydává se s open source licence Mozartovým konsorciem. Mozart byl přenesen na Unix, FreeBSD, Linux, Okna, a Operační Systém Mac.
Jazykové funkce
Oz[2] obsahuje většinu konceptů majora paradigmata programování, včetně logiky, funkční (obojí líné hodnocení a nedočkavé hodnocení ), imperativní, objektově orientované, omezení, distribuované a souběžné programování. Oz má jak jednoduchou formální sémantiku (viz kapitola 13 níže uvedené knihy), tak efektivní implementace.[Citace je zapotřebí ] Oz je konkurence -oriented language, jak tento termín představil Joe Armstrong, hlavní designér Erlangský jazyk. Díky jazyku orientovanému na souběžnost je souběžnost snadno použitelná a efektivní. Oz podporuje kanonický grafické uživatelské prostředí (GUI) jazyk QTk.[3]
Kromě programování s více paradigmy jsou hlavní silné stránky Oz programování omezení a distribuované programování. Díky svému zapracovanému designu je Oz schopen úspěšně implementovat síťově transparentní model distribuovaného programování. Tento model usnadňuje programování, tolerantní k chybám aplikace v daném jazyce. Pro programování omezení představil Oz myšlenku výpočetní prostory, které umožňují uživatelem definované vyhledávací a distribuční strategie ortogonální do omezující domény.
Přehled jazyků
Datové struktury
Oz je založen na základním jazyce s velmi malým počtem datových typů, které lze rozšířit na praktičtější syntaktický cukr.
Základní datové struktury:
- Čísla: plovoucí desetinná čárka nebo celé číslo (skutečné celé číslo)
- Záznamy: pro seskupení dat:
kruh (x: 0 y: 1 rádius: 3 barva: modrá styl: tečky)
. Zde se pojmy x, y, poloměr atd. Nazývají prvky a data spojená s prvky (v tomto případě 0,1,3 atd.) Jsou hodnoty. - Tice: Záznamy s celočíselnými funkcemi ve vzestupném pořadí:
kruh (1: 0 2: 1 3: 3 4: modrá 5: tečky)
. - Seznamy: jednoduchá lineární struktura
'|'(2 '|'(4 '|'(6 '|'(8 nula)))) % jako záznam.2|(4|(6|(8|nula))) % s trochou syntaktického cukru2|4|6|8|nula % více syntaktického cukru[2 4 6 8] % ještě více syntaktického cukru
Tyto datové struktury jsou hodnoty (konstantní), první třída a dynamicky zaškrtnuto. Názvy proměnných v Oz začínají velkým písmenem, aby se odlišily od literály[4] které vždy začínají malým písmenem.
Funkce
Funkce[5] jsou hodnoty první třídy, což umožňuje funkční řád vyššího řádu programování:
zábava {Skutečnost N} -li N =< 0 pak 1 jiný N*{Skutečnost N-1} koneckonec
zábava {Hřeben N K.} {Skutečnost N} div ({Skutečnost K.} * {Skutečnost N-K.}) % celých čísel nemůže přetékat v Oz (pokud nezůstane žádná paměť)koneczábava {SumList Seznam} případ Seznam z nula pak 0 [] H|T pak H+{SumList T} % shody vzorů na seznamech koneckonec
Funkce lze použít s volnými i vázanými proměnnými. Hodnoty volných proměnných jsou nalezeny pomocí static lexikální obor.[6]
Programování vyšších řádů
Funkce jsou jako ostatní Oz objekty. Funkce může být předána jako atribut jiným funkcím nebo může být vrácena ve funkci.
zábava {Náměstí N} % Obecná funkce N*Nkoneczábava {Mapa F Xs} % F je zde funkce - programování vyššího řádu případ Xs z nula pak nula [] X|Xr pak {F X}|{Mapa F Xr} koneckonec%používání{Procházet {Mapa Náměstí [1 2 3]}} % procházení [1 4 9]
Anonymní funkce
Stejně jako mnoho jiných funkčních jazyků podporuje Oz i použití anonymních funkcí (tj. Funkcí, které nemají název) při programování vyššího řádu. K jejich označení se používá symbol $.
V následujícím je funkce čtverce definována anonymně a předána, příčinou [1 4 9]
procházet.
{Procházet {Mapa zábava {$ N} N*N konec [1 2 3]}}
Protože anonymní funkce nemají jména, není možné definovat rekurzivní anonymní funkce.
Postupy
Funkce v Oz mají vrátit hodnotu při posledním příkazu nalezeném v těle funkce během jejího provádění. V níže uvedeném příkladu funkce Ret vrací 5, pokud X> 0 a -5 jinak.
prohlásitzábava {Ret X} -li X > 0 pak 5 jiný ~5 koneckonec
Ale Oz také poskytuje zařízení pro případ, že funkce nesmí vracet hodnoty. Takovým funkcím se říká procedury.[7] Postupy jsou definovány pomocí konstruktu „proc“ následovně
prohlásitproc {Ret X} -li X > 0 pak {Procházet 5} jiný {Procházet ~5} koneckonec
Výše uvedený příklad nevrací žádnou hodnotu, pouze vytiskne 5 nebo -5 v prohlížeči Oz v závislosti na znaménku X.
Proměnné toku dat a deklarativní souběžnost
Když program narazí na nevázanou proměnnou, čeká na hodnotu. Například níže bude vlákno čekat, dokud nebudou X a Y svázány s hodnotou, než se zobrazí hodnota Z.
vlákno Z = X+Y {Procházet Z}konecvlákno X = 40 konecvlákno Y = 2 konec
Hodnotu proměnné toku dat nelze změnit, jakmile je vázána:
X = 1X = 2 % chyba
Proměnné toku dat usnadňují vytváření souběžných agentů proudu:
zábava {Ints N Max} -li N == Max pak nula jiný {Zpoždění 1000} N|{Ints N+1 Max} koneckoneczábava {Součet S Proud} případ Proud z nula pak S [] H|T pak S|{Součet H+S T} koneckonecmístní X Y v vlákno X = {Ints 0 1000} konec vlákno Y = {Součet 0 X} konec {Procházet Y}konec
Z důvodu fungování proměnných toku dat je možné umístit vlákna kamkoli v programu a zaručit, že bude mít stejný výsledek. Díky tomu je souběžné programování velmi snadné. Vlákna jsou velmi levná: je možné mít spuštěných 100 000 vláken najednou.[8]
Příklad: Zkušební dělící síto
Tento příklad počítá proud prvočísel pomocí zkušební rozdělení algoritmus rekurzivním vytvářením souběžných proudových agentů, které odfiltrují nepočáteční čísla:
zábava {Síto Xs} případ Xs z nula pak nula [] X|Xr pak Ys v vlákno Ys = {Filtr Xr zábava {$ Y} Y mod X \= 0 konec} konec X|{Síto Ys} koneckonec
Lenost
Oz používá nedočkavé hodnocení ve výchozím nastavení, ale líné hodnocení[9] je možné. Níže je skutečnost vypočítána pouze tehdy, když je pro výpočet hodnoty Y potřeba hodnota X.
zábava líný {Skutečnost N} -li N =< 0 pak 1 jiný N*{Skutečnost N-1} koneckonecmístní X Y v X = {Skutečnost 100} Y = X + 1konec
líné hodnocení dává možnost ukládání skutečně nekonečných datových struktur v Oz. Síla líného vyhodnocení je vidět z následujícího ukázkového kódu:
prohlásitzábava líný {Spojit Xs Ys} případ Xs#Ys z (X|Xr)#(Y|Yr) pak -li X < Y pak X|{Spojit Xr Ys} elseif X>Y pak Y|{Spojit Xs Yr} jiný X|{Spojit Xr Yr} konec koneckoneczábava líný {Časy N Xs} případ Xs z nula pak nula [] X|Xr pak N*X|{Časy N Xr} koneckonecprohlásit HH = 1 | {Spojit {Časy 2 H} {Spojit {Časy 3 H} {Časy 5 H}}}{Procházet {Seznam.vzít H 6}}
Výše uvedený kód elegantně spočítá všechny Pravidelná čísla[10] v nekonečném seznamu. Skutečná čísla se počítají pouze v případě, že jsou potřebná.
Souběžnost předávání zpráv
Deklarativní souběžný model lze rozšířit o předávání zpráv pomocí jednoduché sémantiky:
prohlásitmístní Proud Přístav v Přístav = {NewPort Proud} {Poslat Přístav 1} % Stream je nyní 1 | _ ('_' označuje nevázanou a nepojmenovanou proměnnou) {Poslat Přístav 2} % Stream je nyní 1 | 2 | _ ... {Poslat Přístav n} % Stream je nyní 1 | 2 | .. | n | _konec
S portem a vláknem lze definovat asynchronní agenty:
zábava {NewAgent Init Zábava} Zpráva Ven v vlákno {FoldL Zpráva Zábava Init Ven} konec {NewPort Zpráva}konec
Stav a objekty
Je opět možné rozšířit deklarativní model o podporu stavového a objektově orientovaného programování s velmi jednoduchou sémantikou. Vytvoření nové proměnlivé datové struktury s názvem Buňky:
místní A X v A = {NewCell 0} A := 1 % mění hodnotu A na 1 X = @A % @ se používá pro přístup k hodnotě Akonec
Díky těmto jednoduchým sémantickým změnám lze podpořit celé objektově orientované paradigma. S trochou syntaktického cukru se OOP dobře integruje do Oz.
třída Čelit attr val pervitin inic(Hodnota) val:=Hodnota konec pervitin Procházet {Procházet @val} konec pervitin vč(Hodnota) val :=@val+Hodnota koneckonecmístní C v C = {Nový Čelit inic(0)} {C vč(6)} {C Procházet}konec
Rychlost provedení
Rychlost spuštění programu vytvořeného překladačem Mozart (verze 1.4.0 implementující Oz 3) je velmi pomalá. Na sada měřítek v průměru je asi 50krát pomalejší než průměr Sbírka překladačů GNU (GCC) pro jazyk C, řešení testovacích úkolů.[když? ][11][ověření se nezdařilo ]
Viz také
- Alice (programovací jazyk), současný funkční omezující jazyk ze Sárské univerzity
- Programování toku dat
- Funkční logické programovací jazyky
- Curry (programovací jazyk)
- Merkur (programovací jazyk)
- Vizuální prolog, objektově orientovaný, funkční, logický jazyk
Reference
- Peter Van Roy a Seif Haridi (2004). Koncepty, techniky a modely počítačového programování. MIT Stiskněte. Tady je online podpůrný materiál pro tuto knihu. Kniha, úvod do principů programovacích jazyků, používá Oz jako preferovaný idiom pro příklady.
- ^ „Licenční informace Mozarta Oz“. 16. ledna 2014. Citováno 16. ledna 2014.
- ^ Gert Smolka (1995). „Programovací model Oz“ (PDF). Přednášky z informatiky. 1000: 324–343. doi:10.1007 / BFb0015252. ISBN 978-3-540-60105-0.
- ^ „QTk“. Archivovány od originál dne 20. května 2013. Citováno 6. dubna 2009.
- ^ https://mozart.github.io/mozart-v1/doc-1.4.0/tutorial/node3.html#label18
- ^ Leif Grönqvist. "Funkce vyššího řádu". Pokročilé funkční programování v Oz. Archivovány od originál dne 3. března 2016. Citováno 3. listopadu 2014.
- ^ Robert Gentleman; Ross Ihaka (září 2000). "Lexikální obor ve statistických výpočtech" (PDF). Journal of Computational and Graphical Statistics. 9 (3, Systems and Languages): 491–508.
- ^ https://mozart.github.io/mozart-v1/doc-1.4.0/tutorial/node5.html#control.procedure
- ^ „Archivovaná kopie“. Archivovány od originál dne 24. února 2015. Citováno 29. listopadu 2008.CS1 maint: archivovaná kopie jako titul (odkaz)
- ^ Paul Hudak (1989). "Koncepce, vývoj a aplikace funkčních programovacích jazyků". ACM Computing Surveys. 21 (3): 359–411. doi:10.1145/72551.72554.
- ^ Rao, AC a Varada Raju, D (1991). "Aplikace techniky Hammingova čísla k detekci izomorfismu mezi kinematickými řetězci a inverzemi". Mechanismus a teorie strojů. 26 (1): 55–75. doi:10.1016 / 0094-114x (91) 90022-v.
- ^ Srovnávací hra pro počítačový jazyk
externí odkazy
- Oficiální webové stránky
- Výukový program pro Oz
- Programming Language Research ve společnosti UCL: Jeden z hlavních vývojářů Mozart / Oz, tato skupina provádí výzkum pomocí Mozart / Oz jako vozidla
- Multiparadigm Programming in Mozart / Oz: Proceedings of MOZ 2004: Konference, která poskytuje snímek práce prováděné s Mozartem / Oz
- Programování v Oz
- Oz základy