Oz (ohjelmointikieli)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 29. syyskuuta 2017 tarkistetusta versiosta . tarkastukset vaativat 5 muokkausta .
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 ) ( 2018-09-05 )
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 .

Kehityshistoria

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.

Kielen ominaisuudet

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.

Kielikatsaus

Tietorakenteet

Kielen ytimen muodostavat muutama perustietorakenne, mutta sitä voidaan laajentaa niin sanotulla syntaktisella sokerilla .

Perustietorakenteet:

'|'(2 '|'(4 '|'(6 '|'(8 nolla)))) 2|(4|(6|(8|nolla))) % syntaktista sokeria 2|4|6|8|nolla % on vielä lyhyempi [2 4 6 8] Syntaktisen sokerin tehokas käyttö tiiviin syntaksin toteuttamisessa

Nämä arvot ovat ensimmäisen tyypin (ensimmäisen luokan) vakiokokonaisuuksia, kun taas kirjoittaminen on dynaamista.

Toiminnot

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 loppu

Säikeen muuttujat ja deklaratiivinen samanaikaisuus

Jos 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 % virhe

Sä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} loppu

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

Esimerkkiohjelmat Ozissa

Eratosthenesin seula

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 loppu

Laiska arviointi

Oz 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ä loppu

Viesti kulkee

Deklaratiivista 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|_ loppu

Asynkronisten agenttien luominen toteutetaan säikeiden ja porttien avulla:

hauskaa {NewAgent Init Fun} Viesti ulos säikeen {FoldL Msg Fun Init Out} loppu {NewPort Msg} loppu

Tilat ja objektit

Deklaratiivista 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 loppu

Tä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} loppu

Esimerkki Oz-ohjelmasta, joka ratkaisee rebusin

Kunto:

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} loppu

näyttää kaikki tämän rebusin ratkaisut taulukon muodossa.

Katso myös

Muistiinpanot

  1. Tietokoneohjelmoinnin käsitteet, tekniikat ja mallit . Haettu 30. marraskuuta 2010. Arkistoitu alkuperäisestä 26. elokuuta 2014.
  2. Mozart-oz.org Samanaikaisuus (linkki ei saatavilla) . Käyttöpäivä: 30. marraskuuta 2010. Arkistoitu alkuperäisestä 24. helmikuuta 2015. 

Linkit