Oz | |
---|---|
Szemantika | funkcionális, procedurális, deklaratív, objektum-orientált, korlátozott számítástechnika, H-modellek, párhuzamos számítástechnika |
Nyelvóra | programozási nyelv , kényszerprogramozási nyelv [d] , és többparadigmás programozási nyelv |
A végrehajtás típusa | összeállított |
Megjelent | 1991 |
Szerző | Gert Smolka és tanítványai |
Kiadás |
Óz 1.4.0 Mozart 2.0.1 (2018. szeptember 5. ) |
Főbb megvalósítások | Mozart |
Befolyásolva | Prológus |
befolyásolta | Alice |
Engedély | MIT licenc |
Weboldal | mozart.github.io |
Az Oz egy magas szintű oktatási programozási nyelv , amely egyesíti a funkcionális , procedurális és deklaratív szemantikát .
Az Oz programozási nyelv fejlesztését 1991-ben Gert Smolka professzor indította el tanítványaival a belgiumi Louvaini Katolikus Egyetem Programozási Rendszerek Laboratóriumából. 1996-ban Seif Haridi és Peter Van Roy, a Svéd Számítástechnikai Intézet munkatársa csatlakozott a fejlesztési folyamathoz, és használták a nyelvet a Concepts, Techniques and Models of Computer Programming [1] klasszikus tankönyvében . 1999 és 2005 között a nyelvet egy nemzetközi kutatócsoport (Mozart Consortium) irányítása alatt fejlesztették ki, amely három egyetemből állt: a Saarlandi Egyetemből , a Svéd Informatikai Intézetből (Svéd Számítástechnikai Intézet) és a Louvaini Katolikus Egyetemből .
Az Oz nyelv kiváló minőségű nyílt forráskódú megvalósítása, a Mozart tartalmaz egy Emacs szerkesztőbővítményen alapuló IDE -t , egy fordítót , egy hibakeresőt , egy profilkészítőt és egyéb segédprogramokat.
A Mozart programozási rendszer fejlesztésének irányítása 2005-ben a kutatók szélesebb körének bevonása érdekében egy fejlesztőcsoporthoz (Mozart Board) került. Ezt a rendszert a Mozart Consortium adta ki ingyenes licenc alatt, majd a legtöbb népszerű operációs rendszerre , köztük a Unixra , a FreeBSD -re , a Linuxra , a Microsoft Windowsra és a Mac OS X -re portolták (portolták).
Az Oz programozási nyelv magában foglalja a legtöbb népszerű programozási paradigmát , beleértve a logikai, funkcionális ( lusta és erőteljes számítástechnika), imperatív, objektumorientált, kényszerprogramozást, elosztott és párhuzamos programozást. Az Oz egyrészt egyszerű formális szemantikával rendelkezik, másrészt egy hatékony szoftveres implementációt készítettek hozzá.
Ennek a nyelvnek a fő előnyei közé tartozik a többparadigmás programozás, a kényszerprogramozás és az elosztott programozás támogatása. Így a nyelvi konstrukciók szintjén támogatott a számítások egyszerű és természetes párhuzamosítása és hálózaton keresztüli elosztása, ami megkönnyíti a hibatűrő alkalmazások létrehozását. Az Oz nyelvű kényszerprogramozás megvalósításához bevezetik a számítási terek fogalmát, amelyben megoldást keresnek. Ez lehetővé teszi a matematikai programozás, és különösen a diszkrét optimalizálás problémáinak megoldását.
A nyelv magját néhány alapvető adatstruktúra alkotja, de kibővíthető az úgynevezett szintaktikai cukorral .
Alapvető adatszerkezetek:
Ezek az értékek az első típusú (első osztályú) állandó entitások, míg a gépelés dinamikus.
A függvények az első típusú entitások , amelyek lehetővé teszik számunkra a funkcionális programozási paradigma alkalmazását:
szórakoztató {Fact N} % faktoriális ha N =< 0, akkor 1 különben N*{Tény N-1} vége vége móka {Comb NK} % kombinációk száma {Fact N} div ({Fact K} * {Fact NK}) % egész szám tetszőlegesen nagy lehet vége fun {SumList List} listaelemek % összege eset listája nulla, majd 0 [] H|T, majd H+{SumList T} % mintaegyezés a listához vége végeHa a program nem kötött változóval találkozik, megvárja, amíg a változó értéket kap:
cérna Z = X+Y % megvárja, amíg az X és Y változók értéket kapnak {Browse Z} % Z értéket jelenít meg vége menet X = 40 vége menet Y = 2 végeA hozzá tartozó értékkel rendelkező adatfolyam-változó értéke nem módosítható:
X=1 X = 2% hibaA szálváltozók megkönnyítik a párhuzamos szálakban futó ügynökök létrehozását:
szórakozás {Ints N Max} ha N == Max, akkor nulla más {Delay 1000} N|{Ints N+1 Max} vége vége szórakoztató {Sum S Stream} eset Nulla folyam, majd S [] H|T, majd S|{Összeg H+ST} vége vége helyi XY be szál X = {Ints 0 1000} vége menet Y = {Sum 0 X} end {Böngészés Y} végeAz adatfolyam-változók működése miatt a programban bárhol használhat szálakat, amelyek garantáltan ugyanazt az eredményt adják vissza, megkönnyítve ezzel a párhuzamos programozást. Ugyanakkor a szálak nagyon kevés rendszererőforrást fogyasztanak: az Erlanghoz hasonlóan 100 000 szál futhat egyszerre [2] .
Ez a példa egy prímfolyamot számít ki az Eratosthenes-algoritmus szitája segítségével. Ehhez rekurzív módon hozzon létre párhuzamos adatfolyamokat, amelyek kiszűrik az összetett számokat:
szórakozás {Sieve Xs} eset Xs nulla, majd nulla [] X|Xr, majd Y be szál Ys = {Filter Xr fun {$Y} Y mod X \= 0 end} end X|{Ys szita} vége végeAz Oz alapértelmezés szerint a lelkes értékelési modellt használja, de támogatja az úgynevezett lusta értékelést is:
szórakoztató lusta {Fact N} ha N =< 0, akkor 1 különben N*{Tény N-1} vége vége helyi XY be X = {100. tény} Y = X + 1%, mivel X értékre van szükség, ez ebben a pillanatban kerül kiszámításra végeA deklaratív párhuzamossági modell az üzenettovábbítási mechanizmussal bővíthető:
kijelent helyi Stream Port be Port = {NewPort Stream} {1-es port küldése} Az adatfolyam %-a most 1|_ ("_" egy kötetlen és névtelen változót jelöl) {2. port küldése} Az adatfolyam %-a most 1|2|_ ... {N. port küldése} Az adatfolyam %-a most 1|2| .. |n|_ végeAz aszinkron ügynökök létrehozása szálak és portok segítségével valósul meg:
szórakozás {NewAgent Init Fun} Üzenet be szál {FoldL Msg Fun Init Out} vége {NewPort Msg} végeA deklaratív párhuzamossági modell kiterjeszthető az állapot- és objektumorientált programozás koncepciójának támogatására; ehhez létre kell hozni egy Cells adatstruktúrát, melynek értéke módosítható:
helyi AX be A = {0. új cella} A := 1% A értékét 1-re változtatja Az X = @A % @ az A értékének eléréséhez használható végeA szemantika enyhe kiterjesztésével kihasználhatja az objektum-orientált programozás teljes erejét:
osztály Számláló attr-val meth init (érték) val:=érték vége meth tallózás {Tallózás @val} vége meth inc (érték) érték :=@érték+Érték vége vége helyi C be C = {Új számláló init(0)} {C inc(6)} {C böngészés} végeÁllapot:
LÁB +BOL --- A JÁTÉK Ahol I=0 és az összes különböző betű különböző számokat jelöl.Megoldás:
helyi Foot Res in proc {Fut C} F#U#T#B#O#L#G#R#A = C ban ben 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} vége {SearchAll Foot Res} {Browse Res} végetáblázat formájában mutatja meg ennek a rebusnak az összes megoldását.
Programozási nyelvek | |
---|---|
|