Irvine Dataflow (Id) is a general-purpose
parallel programming language
Parallel computing is a type of computation in which many calculations or processes are carried out simultaneously. Large problems can often be divided into smaller ones, which can then be solved at the same time. There are several different for ...
, started at the University of California at Irvine in 1975
by
Arvind and K. P. Gostelow. Arvind continued work with Id at
MIT
The Massachusetts Institute of Technology (MIT) is a private land-grant research university in Cambridge, Massachusetts. Established in 1861, MIT has played a key role in the development of modern technology and science, and is one of the ...
into the 1990s.
The major subset of Id is a
purely functional programming language
In computer science, purely functional programming usually designates a programming paradigm—a style of building the structure and elements of computer programs—that treats all computation as the evaluation of mathematical functions.
Program ...
with
non-strict semantics
In a programming language, an evaluation strategy is a set of rules for evaluating expressions. The term is often used to refer to the more specific notion of a ''parameter-passing strategy'' that defines the kind of value that is passed to the ...
. Features include:
higher-order functions
In mathematics and computer science, a higher-order function (HOF) is a function that does at least one of the following:
* takes one or more functions as arguments (i.e. a procedural parameter, which is a parameter of a procedure that is itse ...
, 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
Haskell () is a general-purpose, statically-typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research and industrial applications, Haskell has pioneered a number of programming lan ...
.
Id programs are fine grained
implicitly parallel.
The MVar synchronisation variable abstraction in Haskell is based on Id's M-structures.
["Concurrent Haskell". Peyton-Jones, Gordon and Finne. POPL 1996]
Examples
Id supports
algebraic datatypes, similar to ML, Haskell, or Miranda:
type bool = False , True;
Types are
inferred
Inferences are steps in reasoning, moving from premises to logical consequences; etymologically, the word ''infer'' means to "carry forward". Inference is theoretically traditionally divided into deduction and induction, a distinction that in ...
by default, but may be annotated with a
typeof
declaration. Type variables use the syntax
*0
,
*1
, etc.
typeof id = *0 -> *0;
def id x = x;
A function which uses an array comprehension to compute the first
Fibonacci numbers
In mathematics, the Fibonacci numbers, commonly denoted , form a sequence, the Fibonacci sequence, in which each number is the sum of the two preceding ones. The sequence commonly starts from 0 and 1, although some authors start the sequence from ...
:
typeof fib_array = int -> (array int);
def fib_array n =
;
Note the use of non-strict evaluation in the recursive definition of the array
A
.
Id's lenient evaluation strategy allows cyclic datastructures by default. The following code makes a cyclic list, using the cons operator
:
.
def cycle x = ;
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.
References
External links
ID Language Reference Manual Rishiyur S. Nikhil, 1991.
*"An Asynchronous Programming Language for a Large Multiprocessor Machine", Arvind et al., TR114a, Dept ISC, UC Irvine, Dec 1978
Functional languages
{{compu-lang-stub