Irvine Dataflow ( Id ) — язык параллельного программирования общего назначения , созданный в Калифорнийском университете в Ирвине в 1975 году [1] Арвиндом и К.П. Гостелоу. [2] Арвинд продолжал работать с Id в Массачусетском технологическом институте до 1990-х годов.
Основное подмножество Id — это чисто функциональный язык программирования с нестрогой семантикой . Возможности включают в себя: функции высшего порядка , систему полиморфных типов со статической проверкой типов в стиле Милнера с перегрузкой, определяемые пользователем типы и сопоставление с образцом, а также префиксные и инфиксные операторы. Это привело к развитию pH, параллельного диалекта Haskell .
Id-программы являются мелкозернистыми и неявно параллельными .
Абстракция переменных синхронизации MVar в Haskell основана на M-структурах Id. [3]
Id поддерживает алгебраические типы данных , аналогичные ML, Haskell или Miranda:
введите bool = Ложь | Истинный;
Типы выводятся по умолчанию, но могут быть аннотированы объявлением typeof
. Переменные типа используют синтаксис *0
, *1
и т. д.
идентификатор типа = *0 -> *0;идентификатор защиты х = х;
Функция, которая использует понимание массива для вычисления первых чисел Фибоначчи :
typeof fib_array = int -> (массив int);защита fib_array n = { A = { массив (0,n) из | [0] = 0 | [1] = 1 | [я] = А[i-1] + А[i-2] || я <- 2 до n } В };
Обратите внимание на использование нестрогих вычислений в рекурсивном определении массива A
.
Мягкая стратегия оценки Id по умолчанию допускает циклические структуры данных. Следующий код создает циклический список, используя оператор cons :
.
цикл защиты x = { A = x : A In A };
Однако, чтобы избежать непрерывного построения действительно бесконечных структур, явные задержки должны быть аннотированы с помощью #
:
def count_up_from x = x :# count_up_from (x + 1);