Введение
Язык программирования ISWIM (If You See What I Mean) — абстрактный язык программирования (или семейство языков), созданный Питером Лэндином и впервые описанный в его статье «Следующие 700 языков программирования», опубликованной в Communications of the ACM в 1966 году. Несмотря на то, что он не был реализован, он оказал значительное влияние на разработку языков программирования, особенно функциональных языков, таких как SASL, Miranda, ML, Haskell и их потомков, а также языков программирования с потоковой передачей данных, таких как Lucid.
ISWIM (If You See What I Mean) is an abstract computer programming language (or a family of languages) devised by Peter Landin and first described in his article "The Next 700 Programming Languages", published in the Communications of the ACM in 1966. Although not implemented, it has proved very influential in the development of programming languages, especially functional programming languages such as SASL, Miranda, ML, Haskell and their successors, and dataflow programming languages like Lucid.
Дизайн
ISWIM — это императивный язык программирования с функциональным ядром, представляющий собой синтаксический сахар для лямбда-исчисления, к которому добавлены изменяемые переменные, присваивание и мощный механизм управления — оператор точки программы. Основанный на лямбда-исчислении, ISWIM поддерживает функции высшего порядка и лексически ограниченные переменные. Операционная семантика ISWIM определяется с использованием машины Лэндина SECD и использует передачу по значению, то есть немедленную оценку (eager evaluation). Одной из целей разработки ISWIM было приближение к математической нотации, поэтому Лэндин отказался от точек с запятой ALGOL между операторами и блоков begin-end, заменив их правилом отступов и областью видимости, основанной на отступах. Характерной нотационной особенностью ISWIM является использование предложений `where`. Программа ISWIM представляет собой одно выражение, дополненное предложениями `where` (вспомогательные определения, включая уравнения между переменными), условными выражениями и определениями функций. Наряду с CPL, ISWIM был одним из первых языков программирования, использовавших предложения `where`. Важной семантической особенностью была возможность определения новых типов данных как (возможно, рекурсивной) суммы произведений. Это осуществлялось с помощью несколько многословного описания, близкого к естественному языку, но по сути соответствовало алгебраическим типам данных, встречающимся в современных функциональных языках. Переменные ISWIM не имели явных объявлений типов, и, вероятно (хотя это и не указано явно в статье 1966 года), Лэндин предполагал, что язык будет динамически типизирован, как LISP, в отличие от ALGOL; однако также возможно, что он планировал разработать некоторую форму вывода типов.
Реализации и производные
Не предпринималось прямых попыток реализации ISWIM, но языки PAL Арта Эвана и Gedanken Джона К. Рейнольдса воплотили в себе большинство концепций Лэндина, включая мощные операции передачи управления. Оба языка были динамически типизированными. Язык ML Робина Милнера можно рассматривать как эквивалент ISWIM без оператора J и с использованием вывода типов. Другая линия развития от ISWIM – это исключение императивных возможностей (присваивания и оператора J), оставляя чисто функциональный язык. В этом случае становится возможным переход к ленивым вычислениям. Этот путь привёл к появлению языков программирования SASL, Kent Recursive Calculator (KRC), Hope, Miranda, Haskell и Clean.