Oz (programmeringssprog)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 29. september 2017; checks kræver 5 redigeringer .
Oz
Semantik funktionel, proceduremæssig, deklarativ, objektorienteret, begrænset computing, H-modeller, parallel computing
Sprog klasse programmeringssprog , constraint programmeringssprog [d] og multi-paradigme programmeringssprog
Udførelsestype kompileret
Dukkede op i 1991
Forfatter Gert Smolka og hans elever
Frigøre Oz 1.4.0
Mozart 2.0.1 (5. september 2018 ) ( 2018-09-05 )
Større implementeringer Mozart
Blev påvirket Prolog
påvirket Alice
Licens MIT licens
Internet side mozart.github.io

Oz  er et uddannelsessprog på højt niveau , der kombinerer funktionel , proceduremæssig og deklarativ semantik .

Udviklingshistorie

Udviklingen af ​​Oz-programmeringssproget blev startet i 1991 af professor Gert Smolka med sine studerende fra Programmeringssystemlaboratoriet ved det katolske universitet i Louvain i Belgien. I 1996 sluttede Seif Haridi og Peter Van Roy fra Swedish Institute of Computer Science sig til udviklingsprocessen og brugte sproget i deres klassiske lærebog Concepts, Techniques, and Models of Computer Programming [1] . Fra 1999 til 2005 blev sproget udviklet under vejledning af en international forskningsgruppe (Mozart Consortium), bestående af tre universiteter: Saarlands Universitet , Det Svenske Institut for Informatik (Svensk Institut for Datalogi) og det katolske universitet i Louvain .

En højkvalitets open source- implementering af Oz-sproget inkluderer Mozart en IDE baseret på Emacs editor - udvidelsen , en compiler , en debugger , en profiler og andre hjælpeprogrammer.

Ledelsen af ​​udviklingen af ​​Mozart-programmeringssystemet blev i 2005 overført til en udviklingsgruppe (Mozart Board) for at tiltrække en bredere vifte af forskere. Dette system blev frigivet af Mozart Consortium under en gratis licens og efterfølgende porteret (porteret) til de fleste populære operativsystemer , inklusive Unix , FreeBSD , Linux , Microsoft Windows og Mac OS X.

Funktioner af sproget

Oz-programmeringssproget inkluderer de fleste af begreberne i populære programmeringsparadigmer , herunder logisk, funktionel (både doven og energisk computing), imperativ, objektorienteret, begrænsningsprogrammering, distribueret og parallel programmering. På den ene side har Oz en simpel formel semantik, og på den anden side er der skabt en effektiv softwareimplementering til den.

De vigtigste fordele ved dette sprog inkluderer understøttelse af multi-paradigme programmering, constraint programmering og distribueret programmering. På niveau med sprogkonstruktioner understøttes således enkel og naturlig parallelisering og distribution af beregninger over netværket, hvilket gør det nemt at skabe fejltolerante applikationer. For at implementere begrænsningsprogrammering i Oz-sproget introduceres begrebet computational spaces, hvor der søges efter en løsning. Dette gør det muligt at løse problemer med matematisk programmering, og især problemer med diskret optimering.

Sprogoversigt

Datastrukturer

Kernen i sproget er dannet af nogle få grundlæggende datastrukturer, men kan udvides med det, der er kendt som syntaktisk sukker .

Grundlæggende datastrukturer:

'|'(2 '|'(4 '|'(6 '|'(8 nul)))) 2|(4|(6|(8|nul))) % syntaktisk sukker 2|4|6|8|nul % er endnu kortere [2 4 6 8] % effektiv brug af syntaktisk sukker til at implementere kortfattet syntaks

Disse værdier er konstante enheder af den første slags (første klasse), mens skrivning er dynamisk.

Funktioner

Funktioner er enheder af den første slags , som giver os mulighed for at anvende det funktionelle programmeringsparadigme:

sjov {Fakta N} % faktor hvis N =< 0, så 1 ellers N*{Faktum N-1} ende ende sjov {Comb NK} % antal kombinationer {Faktum N} div ({Fakta K} * {Faktum NK}) % heltal kan være vilkårligt store ende sjov {SumList List} % sum af listeelementer sag Liste over nul derefter 0 [] H|T derefter H+{SumList T} % mønstermatch for liste ende ende

Trådvariabler og deklarativ samtidighed

Hvis programmet støder på en ubundet variabel, venter det, indtil variablen er tildelt en værdi:

tråd Z = X+Y % venter indtil variable X og Y får værdier {Gennemse Z} % viser Z-værdi ende gevind X = 40 ende tråd Y = 2 ende

Det er ikke muligt at ændre værdien af ​​en strømvariabel, der har en værdi tilknyttet:

X=1 X = 2 % fejl

Trådvariabler gør det nemt at oprette agenter, der kører i parallelle tråde:

sjov {Ints N Max} hvis N == Max, så nul andet {Forsinkelse 1000} N|{Ints N+1 Max} ende ende sjov {Sum S Stream} tilfælde Strøm af nul derefter S [] H|T derefter S|{Sum H+ST} ende ende lokale XY i tråd X = {Ints 0 1000} ende tråd Y = {Sum 0 X} ende {Gennemse Y} ende

På grund af den måde, streamvariabler fungerer på, kan du bruge tråde overalt i dit program, der garanteret vil returnere det samme resultat, hvilket gør parallel programmering let. Samtidig bruger tråde meget få systemressourcer: Som i Erlang kan 100.000 tråde køre samtidigt [2] .

Eksempler på programmer i Oz

Si af Eratosthenes

Dette eksempel beregner en strøm af primtal ved hjælp af sigten af ​​Eratosthenes-algoritmen. For at gøre dette skal du rekursivt oprette parallelle strømme, der filtrerer sammensatte tal fra:

sjovt {Sieve Xs} tilfælde Xs på nul og derefter nul [] X|Xr derefter Ys ind tråd Ys = {Filter Xr sjov {$Y} Y mod X \= 0 ende} ende X|{Sive Ys} ende ende

Doven evaluering

Som standard bruger Oz den ivrige evalueringsmodel, men understøtter også den såkaldte dovne evaluering:

sjov doven {Fakta N} hvis N =< 0, så 1 ellers N*{Faktum N-1} ende ende lokale XY i X = {Fakta 100} Y = X + 1 %, da værdien af ​​X er påkrævet, beregnes den på dette tidspunkt ende

Besked passerer

Den deklarative samtidighedsmodel kan udvides ved hjælp af meddelelsesoverførselsmekanismen:

erklære lokal Stream Port ind Port = {NewPort Stream} {Send Port 1} % Stream er nu 1|_ ('_' angiver en ubundet og unavngiven variabel) {Send Port 2} % Stream er nu 1|2|_ ... {Send Port n} % Stream er nu 1|2| .. |n|_ ende

Oprettelsen af ​​asynkrone agenter implementeres ved hjælp af tråde og porte:

sjov {NewAgent Init Fun} Besked ud ind tråd {FoldL Msg Fun Init Out} ende {NewPort Msg} ende

Stater og objekter

Den deklarative samtidighedsmodel kan udvides til at understøtte begrebet tilstands- og objektorienteret programmering; for at gøre dette skal du oprette en Cells-datastruktur, hvis værdi kan ændres:

lokale AX i A = {NewCell 0} A := 1 % ændrer værdien af ​​A til 1 X = @A % @ bruges til at få adgang til værdien af ​​A ende

Med denne lille udvidelse af semantikken kan du bruge den fulde kraft af objektorienteret programmering:

klasse tæller attr-val meth init(værdi) val:=Værdi ende meth gennemse {Gennemse @val} ende meth inc(værdi) val :=@val+værdi ende ende lokale C in C = {Ny tæller init(0)} {C inc(6)} {C browse} ende

Et eksempel på et Oz-program, der løser en rebus

Tilstand:

FOD +BOL --- SPILLET Hvor I=0 og alle forskellige bogstaver står for forskellige tal.

Løsning:

lokale fodres i 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} ende {SearchAll Foot Res} {Browse Res} ende

vil vise alle løsningerne af denne rebus i form af en tabel.

Se også

Noter

  1. Koncepter, teknikker og modeller for computerprogrammering . Hentet 30. november 2010. Arkiveret fra originalen 26. august 2014.
  2. Mozart-oz.org Samtidighed (link ikke tilgængeligt) . Dato for adgang: 30. november 2010. Arkiveret fra originalen 24. februar 2015. 

Links