Misplaced Pages

UNITY (programming language)

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
Theoretical programming language for describing concurrent computations This article is about the 1988 theoretical language. For other uses, see Unity § Software.
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
This article may be too technical for most readers to understand. Please help improve it to make it understandable to non-experts, without removing the technical details. (September 2011) (Learn how and when to remove this message)
This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources.
Find sources: "UNITY" programming language – news · newspapers · books · scholar · JSTOR (July 2019) (Learn how and when to remove this message)
(Learn how and when to remove this message)

UNITY is a programming language constructed by K. Mani Chandy and Jayadev Misra for their book Parallel Program Design: A Foundation. It is a theoretical language which focuses on what, instead of where, when or how. The language contains no method of flow control, and program statements run in a nondeterministic way until statements cease to cause changes during execution. This allows for programs to run indefinitely, such as auto-pilot or power plant safety systems, as well as programs that would normally terminate (which here converge to a fixed point).

Description

All statements are assignments, and are separated by #. A statement can consist of multiple assignments, of the form a,b,c := x,y,z, or a := x || b := y || c := z. You can also have a quantified statement list, <# x,y : expression :: statement>, where x and y are chosen randomly among the values that satisfy expression. A quantified assignment is similar. In <|| x,y : expression :: statement >, statement is executed simultaneously for all pairs of x and y that satisfy expression.

Examples

Bubble sort

Bubble sort the array by comparing adjacent numbers, and swapping them if they are in the wrong order. Using Θ ( n ) {\displaystyle \Theta (n)} expected time, Θ ( n ) {\displaystyle \Theta (n)} processors and Θ ( n 2 ) {\displaystyle \Theta (n^{2})} expected work. The reason you only have Θ ( n ) {\displaystyle \Theta (n)} expected time, is that k is always chosen randomly from { 0 , 1 } {\displaystyle \{0,1\}} . This can be fixed by flipping k manually.

Program bubblesort
declare
    n: integer,
    A: array  of integer
initially
    n = 20 #
    <|| i : 0 <= i and i < n :: A = rand() % 100 >
assign
    <# k : 0 <= k < 2 ::
        <|| i : i % 2 = k and 0 <= i < n - 1 ::
            A, A := A, A 
                if A > A > >
end

Rank-sort

You can sort in Θ ( log n ) {\displaystyle \Theta (\log n)} time with rank-sort. You need Θ ( n 2 ) {\displaystyle \Theta (n^{2})} processors, and do Θ ( n 2 ) {\displaystyle \Theta (n^{2})} work.

Program ranksort
declare
    n: integer,
    A,R: array  of integer
initially
    n = 15 #
    <|| i : 0 <= i < n :: 
        A, R = rand() % 100, i >
assign
    <|| i : 0 <= i < n ::
        R := <+ j : 0 <= j < n and (A < A or (A = A and j < i)) :: 1 > >
    #
    <|| i : 0 <= i < n ::
        A] := A >
end

Floyd–Warshall algorithm

Using the Floyd–Warshall algorithm all pairs shortest path algorithm, we include intermediate nodes iteratively, and get Θ ( n ) {\displaystyle \Theta (n)} time, using Θ ( n 2 ) {\displaystyle \Theta (n^{2})} processors and Θ ( n 3 ) {\displaystyle \Theta (n^{3})} work.

Program shortestpath
declare
    n,k: integer,
    D: array  of integer
initially
    n = 10 #
    k = 0 #
    <|| i,j : 0 <= i < n and 0 <= j < n :: 
        D = rand() % 100 >
assign
    <|| i,j : 0 <= i < n and 0 <= j < n ::
        D := min(D, D + D) > ||
    k := k + 1 if k < n - 1
end

We can do this even faster. The following programs computes all pairs shortest path in Θ ( log 2 n ) {\displaystyle \Theta (\log ^{2}n)} time, using Θ ( n 3 ) {\displaystyle \Theta (n^{3})} processors and Θ ( n 3 log n ) {\displaystyle \Theta (n^{3}\log n)} work.

Program shortestpath2
declare
    n: integer,
    D: array  of integer
initially
    n = 10 #
    <|| i,j : 0 <= i < n and 0 <= j < n ::
        D = rand() % 10 >
assign
    <|| i,j : 0 <= i < n and 0 <= j < n ::
        D := min(D, <min k : 0 <= k < n :: D + D >) >
end

After round r {\displaystyle r} , D contains the length of the shortest path from i {\displaystyle i} to j {\displaystyle j} of length 0 r {\displaystyle 0\dots r} . In the next round, of length 0 2 r {\displaystyle 0\dots 2r} , and so on.

References

  • K. Mani Chandy and Jayadev Misra (1988) Parallel Program Design: A Foundation.
Category: