Oz (programozási nyelv)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2017. szeptember 29-én felülvizsgált verziótól ; az ellenőrzések 5 szerkesztést igényelnek .
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. ) ( 2018-09-05 )
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 .

Fejlesztési előzmények

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).

A nyelv jellemzői

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.

Nyelvi áttekintés

Adatstruktúrák

A nyelv magját néhány alapvető adatstruktúra alkotja, de kibővíthető az úgynevezett szintaktikai cukorral .

Alapvető adatszerkezetek:

'|'(2 '|'(4 '|'(6 '|'(8 nil)))) 2|(4|(6|(8|nil))) % szintaktikus cukor A 2|4|6|8|nulla % még rövidebb [2 4 6 8] A szintaktikai cukor %-os hatékony alkalmazása a tömör szintaxis megvalósításához

Ezek az értékek az első típusú (első osztályú) állandó entitások, míg a gépelés dinamikus.

Funkciók

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ége

Szálváltozók és deklaratív párhuzamosság

Ha 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ége

A hozzá tartozó értékkel rendelkező adatfolyam-változó értéke nem módosítható:

X=1 X = 2% hiba

A 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ége

Az 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] .

Példaprogramok Ózban

Eratoszthenész szita

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ége

Lusta értékelés

Az 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ége

Üzenet átadása

A 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ége

Az 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ége

Állapotok és objektumok

A 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ége

A 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

Példa egy Oz programra, amely megold egy rebust

Á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ége

táblázat formájában mutatja meg ennek a rebusnak az összes megoldását.

Lásd még

Jegyzetek

  1. A számítógépes programozás fogalmai, technikái és modelljei . Letöltve: 2010. november 30. Az eredetiből archiválva : 2014. augusztus 26..
  2. Mozart-oz.org Egyidejűség (a hivatkozás nem elérhető) . Hozzáférés dátuma: 2010. november 30. Az eredetiből archiválva : 2015. február 24. 

Linkek