MultiLisp — это функциональный язык программирования , диалект языка Lisp и его диалекта Scheme , расширенный конструкциями для выполнения параллельных вычислений и разделяемой памяти . Эти расширения имеют побочные эффекты , делающие MultiLisp недетерминированным . Наряду с расширениями параллельного программирования MultiLisp также имел некоторые необычные алгоритмы сборки мусора и планирования задач. Как и Scheme, MultiLisp был оптимизирован для символьных вычислений . В отличие от некоторых языков параллельного программирования, MultiLisp включает конструкции для создания побочных эффектов и явного внедрения параллелизма.
Он был разработан Робертом Х. Холстедом-младшим в начале 1980-х годов для использования в 32-процессорном мультипроцессоре Concert , который затем разрабатывался в Массачусетском технологическом институте (MIT) и реализовывался в Interlisp . Это повлияло на развитие диалектов Scheme Gambit , [1] и Interlisp- VAX .
MultiLisp обеспечивает параллелизм с макросом PCALL , где
(PCALL Fun A B C ...)
эквивалентно
(Fun A B C ...)
за исключением того, что аргументы A, B, C,
и т. д. явно разрешены для параллельной оценки; это обходит обычный порядок оценки, который является последовательным и слева направо. Он также использует конструкцию параллельного программирования, называемую Futures , которая напоминает разветвление в сочетании с ленивым вычислением . Используя эту конструкцию, такое выражение, как
(cons (FUTURE A) (FUTURE B))
можно написать, которая будет перекрывать вычисление выражений A и B не только друг с другом, но и с вычислениями, использующими результат вызова cons , до тех пор, пока не будет выполнена операция, требующая корректной информации о значении A или B. .