Oz (programmeringsspråk)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 29 september 2017; kontroller kräver 5 redigeringar .
Uns
Semantik funktionell, procedurell, deklarativ, objektorienterad, begränsad beräkning, H-modeller, parallell beräkning
Språkklass programmeringsspråk , begränsningsprogrammeringsspråk [d] och programmeringsspråk med flera paradigm
Utförandetyp sammanställt
Framträdde i 1991
Författare Gert Smolka och hans elever
Släpp Oz 1.4.0
Mozart 2.0.1 (5 september 2018 ) ( 2018-09-05 )
Stora implementeringar Mozart
Blivit påverkad Prolog
påverkas Alice
Licens MIT-licens
Hemsida mozart.github.io

Oz  är ett pedagogiskt programmeringsspråk på hög nivå som kombinerar funktionell , processuell och deklarativ semantik .

Utvecklingshistorik

Utvecklingen av programmeringsspråket Oz startades 1991 av professor Gert Smolka med hans studenter från programmeringssystemlaboratoriet vid katolska universitetet i Louvain i Belgien. 1996 gick Seif Haridi och Peter Van Roy från Svenska Institutet för Datavetenskap med i utvecklingsprocessen och använde språket i sin klassiska lärobok Concepts, Techniques, and Models of Computer Programming [1] . Från 1999 till 2005 utvecklades språket under ledning av en internationell forskargrupp (Mozart Consortium), bestående av tre universitet: Saarlands universitet , Svenska Institutet för Informatik (Svenska Institutet för Datavetenskap) och katolska universitetet i Louvain .

Mozart är en högkvalitativ implementering av Oz-språket med öppen källkod och inkluderar en IDE baserad på Emacs editortillägg , en kompilator , en debugger , en profilerare och andra verktyg.

Ledningen av utvecklingen av programmeringssystemet Mozart 2005 överfördes till en utvecklingsgrupp (Mozart Board) för att attrahera ett bredare spektrum av forskare. Detta system släpptes av Mozart Consortium under en fri licens och portades (porterades) därefter till de flesta populära operativsystem , inklusive Unix , FreeBSD , Linux , Microsoft Windows och Mac OS X.

Funktioner i språket

Oz-programmeringsspråket inkluderar de flesta av begreppen för populära programmeringsparadigm , inklusive logisk, funktionell (både lat och kraftfull datoranvändning), imperativ, objektorienterad, begränsningsprogrammering, distribuerad och parallell programmering. Å ena sidan har Oz en enkel formell semantik, och å andra sidan har en effektiv mjukvaruimplementering skapats för den.

De främsta fördelarna med detta språk inkluderar stöd för multiparadigmprogrammering, begränsningsprogrammering och distribuerad programmering. På nivån för språkkonstruktioner stöds således enkel och naturlig parallellisering och distribution av beräkningar över nätverket, vilket gör det enkelt att skapa feltoleranta applikationer. För att implementera begränsningsprogrammering i Oz-språket introduceras konceptet med beräkningsutrymmen, där en lösning söks. Detta gör det möjligt att lösa problem med matematisk programmering, och i synnerhet problem med diskret optimering.

Språköversikt

Datastrukturer

Språkets kärna bildas av ett fåtal grundläggande datastrukturer, men kan utökas med vad som kallas syntaktisk socker .

Grundläggande datastrukturer:

'|'(2 '|'(4 '|'(6 '|'(8 noll))))) 2|(4|(6|(8|noll))) % syntaktisk socker 2|4|6|8|noll % är ännu kortare [2 4 6 8] % effektiv användning av syntaktisk socker för att implementera kortfattad syntax

Dessa värden är konstanta enheter av det första slaget (första klass), medan att skriva är dynamiskt.

Funktioner

Funktioner är entiteter av det första slaget , vilket gör att vi kan tillämpa det funktionella programmeringsparadigmet:

kul {Fakta N} % faktor om N =< 0 så är 1 annat N*{Fakta N-1} slut slutet kul {Comb NK} % antal kombinationer {Fakta N} div ({Fakta K} * {Fakta NK}) % heltal kan vara godtyckligt stora slutet fun {SumList List} % summa av listelement fall Lista på noll sedan 0 [] H|T sedan H+{SumList T} % mönstermatchning för lista slutet slutet

Trådvariabler och deklarativ samtidighet

Om programmet stöter på en obunden variabel, väntar det tills variabeln tilldelas ett värde:

tråd Z = X+Y % väntar tills variablerna X och Y får värden {Bläddra Z} % visar Z-värdet slutet gänga X = 40 ände tråd Y = 2 ände

Det är inte möjligt att ändra värdet på en strömvariabel som har ett värde kopplat till sig:

X=1 X = 2 % fel

Trådvariabler gör det enkelt att skapa agenter som körs i parallella trådar:

kul {Ints N Max} om N == Max då noll annan {Delay 1000} N|{Ints N+1 Max} slutet slutet kul {Sum S Stream} fall Ström av noll sedan S [] H|T sedan S|{Summa H+ST} slut slutet lokal XY in tråd X = {Ints 0 1000} slut tråd Y = {Summa 0 X} slut {Bläddra Y} slutet

På grund av hur strömvariabler fungerar kan du använda trådar var som helst i ditt program som garanterat ger samma resultat, vilket gör parallell programmering enkel. Samtidigt förbrukar trådar väldigt lite systemresurser: som i Erlang kan 100 000 trådar köras samtidigt [2] .

Exempel på program i Oz

Sieve of Eratosthenes

Detta exempel beräknar en ström av primtal med hjälp av sikten från Eratosthenes-algoritmen. För att göra detta, skapa rekursivt parallella strömmar som filtrerar bort sammansatta tal:

kul {Sieve Xs} fall Xs av noll sedan noll [] X|Xr sedan Ys in tråd Ys = {Filter Xr kul {$Y} Y mod X \= 0 slut} slut X|{Sive Ys} slutet slutet

Lat utvärdering

Som standard använder Oz den ivriga utvärderingsmodellen, men stöder också den så kallade lata utvärderingen:

rolig lat {Fakta N} om N =< 0 så är 1 annat N*{Fakta N-1} slut slutet lokal XY in X = {Fakta 100} Y = X + 1 % eftersom värdet på X krävs, det beräknas i detta ögonblick slutet

Meddelande passerar

Den deklarativa samtidighetsmodellen kan utökas med hjälp av meddelandeöverföringsmekanismen:

deklarera lokal Stream Port in Port = {NewPort Stream} {Send Port 1} % Stream är nu 1|_ ('_' indikerar en obunden och namnlös variabel) {Skicka port 2} % Stream är nu 1|2|_ ... {Skicka port n} % Stream är nu 1|2| .. |n|_ slutet

Skapandet av asynkrona agenter implementeras med hjälp av trådar och portar:

kul {NewAgent Init Fun} Msg Ut in tråd {FoldL Msg Fun Init Out} slut {NewPort Msg} slutet

Tillstånd och objekt

Den deklarativa samtidighetsmodellen kan utvidgas för att stödja begreppet tillstånd och objektorienterad programmering; för att göra detta måste du skapa en celldatastruktur, vars värde kan ändras:

lokal AX in A = {NewCell 0} A := 1% ändrar värdet på A till 1 X = @A % @ används för att komma åt värdet på A slutet

Med denna lilla förlängning av semantik kan du använda den fulla kraften av objektorienterad programmering:

klassräknare attr-val meth init(Value) val:=värde slutet meth bläddra {Bläddra @val} slutet meth inc(värde) val :=@val+värde slutet slutet lokal C in C = {New Counter init(0)} {C inc(6)} {C bläddra} slutet

Ett exempel på ett Oz-program som löser en rebus

Skick:

FOT +BOL --- SPELET Där I=0 och alla olika bokstäver står för olika siffror.

Lösning:

lokala fotres in proc {Fut C} F#U#T#B#O#L#G#R#A = C i 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} slutet {SearchAll Foot Res} {Bläddra Res} slutet

kommer att visa alla lösningar för denna rebus i form av en tabell.

Se även

Anteckningar

  1. Koncept, tekniker och modeller för datorprogrammering . Hämtad 30 november 2010. Arkiverad från originalet 26 augusti 2014.
  2. Mozart-oz.org Samtidighet (länk ej tillgänglig) . Datum för åtkomst: 30 november 2010. Arkiverad från originalet den 24 februari 2015. 

Länkar