Oz | |
---|---|
Semantiikka | toiminnallinen, proseduaalinen, deklaratiivinen, oliosuuntautunut, rajoitettu laskenta, H-mallit, rinnakkaislaskenta |
Kieliluokka | ohjelmointikieli , rajoitusohjelmointikieli [d] ja moniparadigmaohjelmointikieli |
Toteutustyyppi | koottu |
Esiintyi | 1991 |
Tekijä | Gert Smolka ja hänen oppilaansa |
Vapauta |
Oz 1.4.0 Mozart 2.0.1 (5. syyskuuta 2018 ) |
Tärkeimmät toteutukset | Mozart |
Vaikutettu | Prologi |
vaikutti | Alice |
Lisenssi | MIT-lisenssi |
Verkkosivusto | mozart.github.io |
Oz on korkean tason opetusohjelmointikieli , jossa yhdistyvät toiminnallinen , proseduurillinen ja deklaratiivinen semantiikka .
Oz-ohjelmointikielen kehittämisen aloitti vuonna 1991 professori Gert Smolka opiskelijoidensa kanssa Louvainin katolisen yliopiston ohjelmointijärjestelmälaboratoriosta Belgiassa. Vuonna 1996 Seif Haridi ja Peter Van Roy Ruotsin tietojenkäsittelytieteen instituutista liittyivät kehitysprosessiin ja käyttivät kieltä klassisessa oppikirjassaan Concepts, Techniques and Models of Computer Programming [1] . Vuodesta 1999 vuoteen 2005 kieltä kehitettiin kansainvälisen tutkimusryhmän (Mozart Consortium) ohjauksessa, joka koostuu kolmesta yliopistosta: Saarlandin yliopistosta , Ruotsin tietotekniikan instituutista (Swedish Institute of Computer Science) ja Louvainin katolisesta yliopistosta .
Laadukas avoimen lähdekoodin Oz-kielen toteutus, Mozart sisältää Emacsin editorilaajennukseen perustuvan IDE :n, kääntäjän , virheenkorjaajan , profiloijan ja muita apuohjelmia.
Mozart-ohjelmointijärjestelmän kehittämisen johtaminen siirrettiin vuonna 2005 kehitysryhmälle (Mozart Board) laajemman tutkijajoukon houkuttelemiseksi. Mozart-konsortio julkaisi tämän järjestelmän ilmaisella lisenssillä, ja sen jälkeen se siirrettiin (siirrettiin) suosituimpiin käyttöjärjestelmiin , mukaan lukien Unix , FreeBSD , Linux , Microsoft Windows ja Mac OS X.
Oz-ohjelmointikieli sisältää useimmat suosittujen ohjelmointiparadigmien käsitteet , mukaan lukien looginen, toiminnallinen (sekä laiska että voimakas tietojenkäsittely), pakollinen, olio-ohjelmointi, rajoitusohjelmointi, hajautettu ja rinnakkaisohjelmointi. Toisaalta Ozilla on yksinkertainen muodollinen semantiikka, ja toisaalta sille on luotu tehokas ohjelmistototeutus.
Tämän kielen tärkeimpiä etuja ovat moniparadigmaohjelmoinnin, rajoitusohjelmoinnin ja hajautetun ohjelmoinnin tuki. Siten kielikonstruktioiden tasolla tuetaan yksinkertaista ja luonnollista laskutoimitusten rinnastamista ja jakelua verkon yli, mikä helpottaa vikasietoisten sovellusten luomista. Rajoitusohjelmoinnin toteuttamiseksi Oz-kielellä otetaan käyttöön laskennallisten tilojen käsite, jossa etsitään ratkaisua. Tämä mahdollistaa matemaattisen ohjelmoinnin ja erityisesti diskreetin optimoinnin ongelmien ratkaisemisen.
Kielen ytimen muodostavat muutama perustietorakenne, mutta sitä voidaan laajentaa niin sanotulla syntaktisella sokerilla .
Perustietorakenteet:
Nämä arvot ovat ensimmäisen tyypin (ensimmäisen luokan) vakiokokonaisuuksia, kun taas kirjoittaminen on dynaamista.
Funktiot ovat ensimmäisen tyyppisiä kokonaisuuksia , joiden avulla voimme soveltaa toiminnallista ohjelmointiparadigmaa:
hauskaa {Fact N} % factorial jos N = < 0, niin 1 muuten N*{Fact N-1} -pää loppu hauskaa {Comb NK} % yhdistelmien lukumäärä {Fact N} div ({Fact K} * {Fact NK}) % kokonaislukuja voi olla mielivaltaisen suuria loppu hauskaa {SumList List} % listan elementtien summa tapaus Lista nollasta sitten 0 [] H|T sitten H+{SumList T} % kuvion vastaavuus listalle loppu loppuJos ohjelma kohtaa sitomattoman muuttujan, se odottaa, kunnes muuttujalle on annettu arvo:
lanka Z = X+Y % odottaa, kunnes muuttujat X ja Y saavat arvot {Browse Z} % näyttää Z-arvon loppu lanka X = 40 päätä lanka Y = 2 päätäEi ole mahdollista muuttaa virtamuuttujan arvoa, johon liittyy arvo:
X=1 X = 2 % virheSäikeen muuttujien avulla on helppoa luoda agentteja, jotka toimivat rinnakkaisissa säikeissä:
hauskaa {Ints N Max} jos N == Max, niin nolla muu {Viive 1000} N|{Ints N+1 Max} loppu loppu hauskaa {Sum S Stream} tapaus Nollavirta sitten S [] H|T sitten S|{Sum H+ST} loppu loppu paikallinen XY sisään lanka X = {Ints 0 1000} end lanka Y = {Summa 0 X} loppu {Selaa Y} loppuVirtausmuuttujien toimintatavan ansiosta voit käyttää kaikkialla ohjelmassasi säikeitä, jotka taatusti palauttavat saman tuloksen, mikä tekee rinnakkaisohjelmoinnista helppoa. Samaan aikaan säikeet kuluttavat hyvin vähän järjestelmäresursseja: kuten Erlangissa, 100 000 säiettä voi ajaa samanaikaisesti [2] .
Tämä esimerkki laskee alkulukuvirran käyttämällä Eratosthenes-algoritmin seulaa. Voit tehdä tämän luomalla rekursiivisesti rinnakkaisia virtoja, jotka suodattavat pois yhdistelmäluvut:
hauskaa {Sieve Xs} tapaus Xs nollasta sitten nolla [] X|Xr sitten Y sisään säiettä Ys = {Filter Xr fun {$Y} Y mod X \= 0 end} end X|{Seula Ys} loppu loppuOz käyttää oletusarvoisesti innokasta arviointimallia, mutta tukee myös ns. laiska arviointia:
hauska laiska {fact N} jos N = < 0, niin 1 muuten N*{Fact N-1} -pää loppu paikallinen XY sisään X = {fakta 100} Y = X + 1%, koska X:n arvo vaaditaan, se lasketaan tällä hetkellä loppuDeklaratiivista samanaikaisuusmallia voidaan laajentaa käyttämällä viestinvälitysmekanismia:
julistaa paikallinen Stream-portti sisään Portti = {NewPort Stream} {Lähetä portti 1} % Stream on nyt 1|_ ('_' tarkoittaa sitomatonta ja nimeämätöntä muuttujaa) {Lähetä portti 2} % Stream on nyt 1|2|_ ... {Lähetä portti n} % Stream on nyt 1|2| .. |n|_ loppuAsynkronisten agenttien luominen toteutetaan säikeiden ja porttien avulla:
hauskaa {NewAgent Init Fun} Viesti ulos säikeen {FoldL Msg Fun Init Out} loppu {NewPort Msg} loppuDeklaratiivista samanaikaisuusmallia voidaan laajentaa tukemaan tila- ja olioohjelmoinnin käsitettä; Tätä varten sinun on luotava Cells-tietorakenne, jonka arvoa voidaan muuttaa:
paikallinen AX sisään A = {Uusi solu 0} A := 1 % muuttaa A:n arvon 1:ksi X = @A % @ käytetään A:n arvon saamiseksi loppuTällä vähäisellä semantiikan laajennuksella voit käyttää olio-ohjelmoinnin kaikkia tehoja:
luokan laskuri attr-val meth init (arvo) val:=Arvo loppu meth selata {Selaa @val} loppu met inc(arvo) val :=@val+Arvo loppu loppu paikallinen C in C = {Uusi laskurin aloitus(0)} {C inc(6)} {C selaa} loppuKunto:
JALKA +BOL --- PELI Missä I=0 ja kaikki eri kirjaimet tarkoittavat eri numeroita.Ratkaisu:
paikallinen Foot Res in proc {Fut C} F#U#T#B#O#L#G#R#A = C sisään 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} loppu {SearchAll Foot Res} {Browse Res} loppunäyttää kaikki tämän rebusin ratkaisut taulukon muodossa.
Ohjelmointikielet | |
---|---|
|