Введение

Язык программирования ISWIM (If You See What I Mean) — абстрактный язык программирования (или семейство языков), созданный Питером Лэндином и впервые описанный в его статье «Следующие 700 языков программирования», опубликованной в Communications of the ACM в 1966 году. Несмотря на то, что он не был реализован, он оказал значительное влияние на разработку языков программирования, особенно функциональных языков, таких как SASL, Miranda, ML, Haskell и их потомков, а также языков программирования с потоковой передачей данных, таких как 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.