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