UNITY (programmeringsspråk)

UNITY är ett programmeringsspråk som konstruerats av K. Mani Chandy och Jayadev Misra för deras bok Parallel Program Design: A Foundation . Det är ett teoretiskt språk som fokuserar på vad , istället för var , när eller hur . Språket innehåller ingen metod för flödeskontroll , och programsatser körs på ett icke-deterministiskt sätt tills satser upphör att orsaka ändringar under körning. Detta gör att program kan köras på obestämd tid, såsom autopilot- eller kraftverkssäkerhetssystem, såväl som program som normalt skulle avslutas (som här konvergerar till en fast punkt ).

Beskrivning

Alla påståenden är tilldelningar och separeras med # . Ett påstående kan bestå av flera tilldelningar, av formen a,b,c := x,y,z eller a := x || b := y || c := z . Du kan också ha en kvantifierad satslista , <# x,y : expression :: sats > , där x och y väljs slumpmässigt bland de värden som uppfyller expression . Ett kvantifierat uppdrag är liknande. I <|| x,y : expression :: sats > , sats exekveras samtidigt för alla par av x och y som uppfyller expression .

Exempel

Bubblesort

Bubblesortera arrayen genom att jämföra intilliggande nummer och byta dem om de är i fel ordning. Använder förväntad tid, processorer och förväntat arbete. Anledningen till att du bara har förväntad tid, är att k alltid väljs slumpmässigt från . Detta kan åtgärdas genom att vända k manuellt.

Program bubblesort deklarera n: heltal, A: matris [0..n-1] av heltal initialt n = 20 # <|| i : 0 <= i och i < n :: A[i] = rand() % 100 > tilldela <# k : 0 <= k < 2 :: <|| i : i % 2 = k och 0 <= i < n - 1 :: A[i], A[i+1] := A[i+1], A[i] om A[i] > A[ i+1] > > slut

Rang-sortera

Du kan sortera i tid med rank-sort. Du behöver processorer och gör arbete.

Program ranksort deklarera n: heltal, A,R: array [0..n-1] av heltal initialt n = 15 # <|| i : 0 <= i < n :: A[i], R[i] = rand() % 100, i > tilldela <|| i : 0 <= i < n :: R[i] := <+ j : 0 <= j < n och (A[j] < A[i] eller (A[j] = A[i] och j < i)) :: 1 > > # <|| i : 0 <= i < n :: A[R[i]] := A[i] > slut

Floyd-Warshall-algoritm

Genom att använda Floyd–Warshall-algoritmen alla pars kortaste väg- algoritm, inkluderar vi intermediära noder iterativt och får tid, med processorer och fungerar.

Programmets kortaste väg deklarerar n,k: heltal, D: array [0..n-1, 0..n-1] av heltal initialt n = 10 # k = 0 # <|| i,j : 0 <= i < n och 0 <= j < n :: D[i,j] = rand() % 100 > tilldela <|| i,j : 0 <= i < n och 0 <= j < n :: D[i,j] := min(D[i,j], D[i,k] + D[k,j]) > || k := k + 1 om k < n - 1 ände

Vi kan göra detta ännu snabbare. Följande program beräknar alla pars kortaste väg i tid, med hjälp av processorer och fungerar.

Program shortestpath2 deklarera n: heltal, D: matris [0..n-1, 0..n-1] av heltal initialt n = 10 # <|| i,j : 0 <= i < n och 0 <= j < n :: D[i,j] = rand() % 10 > tilldela <|| i,j : 0 <= i < n och 0 <= j < n :: D[i,j] := min(D[i,j], ) > slut

Efter omgången D[i,j] längden på den kortaste vägen från till av längden . I nästa omgång, av längden , och så vidare.

  • K. Mani Chandy och Jayadev Misra (1988) Parallell Program Design: A Foundation .