ISWIM

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:44, 22 мая 2016.
ISWIM
Парадигма функциональный, императивный
Спроектировано Питер Лэндин
Первый   появившийся 1966
Влияние
Sasl, ML

ISWIM (сокр. от "If You See What I Mean" (рус. "Если Вы Понимаете, О Чем Я")) - оказавший значительное влияние абстрактный язык программирования (или семья языков), который, однако, не был воплощен в жизнь. Впервые описан в статье Питера Ландина "The Next 700 Programming Languages" в 1966 году.

Характеристика

ISWIM — императивный язык с функциональным ядром: λ-исчисление с синтаксическим сахаром, для использования изменяемого состояния, присваивания и мощного механизма управления — J-оператора. Благодаря λ-исчислению, в ISWIM есть функции высшего порядка и переменные с лексической областью видимости.

Новшества языка:

  • J-оператор
  • Отступы для выделения блоков кода
  • λ-исчисление
  • where- и let-выражения

Оказал влияние на: SASL, Miranda, ML, Haskell.

Концепция

ISWIM - это "семейство языков, каждый из которых есть результат выбора набора примитивов". В основе этого утверждения лежит мысль, что язык программирования можно представить в виде двух слоев: базового набора примитивов и набора их комбинаций, которые будут "описывать вещи в терминах других вещей". Таким образом, семья языков должна быть задана набором базовых операций, а для конкретного языка выбираются примитивы на основе проблемной ориентации языка.

В текстовом представлении программы на ISWIM очень близки к обычному стилю математических текстов: локальные определения задаются where и let блоками, а область видимости задается отступами (как, например, в Python).

Интересной отличительной особенностью ISWIM (как и CPL) являются where-блоки. Программа на ISWIM - это одно выражение, заданное where-блоком, условным выражением и определениями функций. Новые типы данных могли быть определены (возможно и рекурсивно) как сумма произведений. Для этого использовалось ёмкое описание, довольно сходное с естественными языками, по сути равное алгебраическим типам данных в современных функциональных языках. Язык не предполагает использования ленивых вычислений. В статье не указано, предполагалась ли типизация переменных в ISWIM динамической или строгой.

ISWIM не имеет прямых реализаций, но появилось две линии последователей этого языка:

  • PAL Арта Эвана (Art Evan) и Gedanken Джона Рейнолда (John Reynold) использовали большинство ключевых концептов Лэндина, включая мощные операции передачи управления. Оба эти языка использовали динамическую типизацию. ML Милнера можно считать эквивалентным ISWIM без оператора «J», но с выведением типов.
  • Другая линия продолжателей ISWIM избавилась от императивных особенностей (присваивания и «J») приводя, таким образом, к развитию чисто функциональных языков, впоследствии с переключением на ленивые вычисления. Этим путём пошли SASL, Miranda и Haskell.

Сравнение с Lisp

  • ISWIM это язык, основанный на λ-исчислении, каковым Lisp не являлся.
  • ISWIM не использует списки как часть языка – ни как предпочтительный тип структурирования данных, ни в качестве представления самой программы.

Примеры кода на ISWIM

Следует понимать, что язык так и не был реализован, поэтому можно привести примеры лишь из оригинальной статьи:

   Print the x such that x^2 - x - 6 = 0 /\ x >= 0
   Print f(1, -1, 6)
        where f(a, b, c) = the x such that ax^2 + bx + c = 0 /\ x >= 0

Ссылки

  1. Iswim
  2. Оригинальная статья
  3. статья на английской Wikipedia