Id (programming language)

Irvine Dataflow (Id) is a general-purpose parallel programming language, started at the University of California at Irvine in 1975 by Arvind and K. P. Gostelow. Arvind continued work with Id at MIT into the 1990s.

The major subset of Id is a purely functional programming language with non-strict semantics. Features include: higher-order functions, a Milner-style statically type-checked polymorphic type system with overloading, user defined types and pattern matching, and prefix and infix operators. It led to the development of pH, a parallel dialect of Haskell.

Id programs are fine grained implicitly parallel.

The MVar synchronisation variable abstraction in Haskell is based on Id's M-structures.

Examples
Id supports algebraic datatypes, similar to ML, Haskell, or Miranda:

type bool = False | True;

Types are inferred by default, but may be annotated with a  declaration. Type variables use the syntax,  , etc.

typeof id = *0 -> *0; def id x = x;

A function which uses an array comprehension to compute the first $$n$$ Fibonacci numbers:

typeof fib_array = int -> (array int); def fib_array n = { A = { array (0,n) of        | [0] = 0 | [1] = 1        | [i] = A[i-1] + A[i-2] || i <- 2 to n } In A };

Note the use of non-strict evaluation in the recursive definition of the array.

Id's lenient evaluation strategy allows cyclic datastructures by default. The following code makes a cyclic list, using the cons operator.

def cycle x = { A = x : A In A };

However, to avoid nonterminating construction of truly infinite structures, explicit delays must be annotated using :

def count_up_from x = x :# count_up_from (x + 1);

Implementations

 * pHluid
 * The pHluid system was a research implementation of Id programming language, with future plans for a front-end for pH, a parallel dialect of the Haskell programming language, implemented at Digital's Cambridge Research Laboratory. and non-profit use. It is targeted at standard Unix workstation hardware.