Irvine Dataflow ( Id ) es un lenguaje de programación paralela de propósito general , iniciado en la Universidad de California en Irvine en 1975 [1] por Arvind y KP Gostelow. [2] Arvind continuó trabajando con Id en el MIT hasta la década de 1990.
El subconjunto principal de Id es un lenguaje de programación puramente funcional con semántica no estricta . Las características incluyen: funciones de orden superior , un sistema de tipos polimórficos con verificación de tipos estática al estilo Milner con sobrecarga, tipos definidos por el usuario y coincidencia de patrones, y operadores de prefijo e infijo. Condujo al desarrollo de pH, un dialecto paralelo de Haskell .
Los programas de identificación son de grano fino e implícitamente paralelos .
La abstracción de la variable de sincronización MVar en Haskell se basa en las M-estructuras de Id. [3]
Id admite tipos de datos algebraicos , similares a ML, Haskell o Miranda:
tipo bool = Falso | Verdadero;
Los tipos se infieren de forma predeterminada, pero se pueden anotar con una typeof
declaración. Las variables de tipo utilizan la sintaxis *0
, *1
, etc.
tipo de id = *0 -> *0;definición id x = x;
Una función que utiliza una comprensión de matriz para calcular los primeros números de Fibonacci :
tipo de fib_array = int -> (matriz int);definición fib_array n = { A = { matriz (0,n) de | [0] = 0 | [1] = 1 | [i] = A[i-1] + A[i-2] || i <- 2 a n } En A };
Tenga en cuenta el uso de evaluación no estricta en la definición recursiva de la matriz A
.
La estrategia de evaluación indulgente de Id permite estructuras de datos cíclicas de forma predeterminada. El código siguiente crea una lista cíclica mediante el operador cons :
.
def ciclo x = { A = x : A En A };
Sin embargo, para evitar la construcción no terminante de estructuras verdaderamente infinitas, los retrasos explícitos deben anotarse utilizando #
:
def contar_arriba_desde x = x :# contar_arriba_desde (x + 1);