WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Icon
Семантика мультипарадигменный: императивный, логический
Класс языка язык программирования
Тип исполнения интерпретатор
Появился в 1974
Автор Ralph E. Griswold
Система типов динамическая
Основные реализации: Icon, Jcon, Unicon
Испытал влияние Снобол, Algol
Повлиял на Python
Сайт cs.arizona.edu/icon
Icon

Скриншот WinIcon v.9.3.2, запущен пример VQUEENS.ICN, часть IPL.
Тип Транслятор
Разработчик Ralph E. Griswold, Gregg Townsend
Операционная система Unix (тестируются сборки под Linux и BSD), MacOS и Microsoft Windows с Cygwin
Первый выпуск 1977 и 1979
Последняя версия 9.5.1 (6 июня, 2013)
Лицензия GNU GPL
Сайт cs.arizona.edu/icon/
Unicon

Скриншот UniconIDE v.12.0.2
Тип Транслятор
Разработчик Clint Jeffery
Операционная система Linux и Microsoft Windows
Первый выпуск 1977 и 1979
Последняя версия 12.1.0[1] (27 августа 2012)
Лицензия GNU GPL
Сайт unicon.sf.net

Icon — язык программирования, унаследовавший идеологию более раннего языка того же автора Снобол. Название языка не имеет ничего общего с «иконками», а является сокращением от слова англ. iconoclastic (иконоборческий), используемом в смысле борьбы с конформизмом в разработке языков программирования.

Это сверхвысокоуровневый язык программирования, в который интегрированы механизмы сопоставления с образцом и бэктрекинга, что сближает его с языками логического программирования.

Язык является динамически типизированным, имеет встроенные мощные типы данных. Процедуры в Icon’е относятся к величинам первого класса (англ. first class values), что означает возможность присваивания переменным значений самих процедур, а не результатов их выполнения. Существует механизм со-выражений (англ. co-expression), позволяющий создавать сопрограммы.

Базовый синтаксис

Синтаксис Icon унаследован у семейства языков программирования Algol и напоминает синтаксис языков C или Pascal. На Паскаль Icon похож больше, он использует для присваивания знак :=, ключевое слово procedure и т. п. С другой стороны Icon использует фигурные скобки в C-стиле для группировки операторов языка, а работа программы начинается с процедуры с именем «main».

Процедуры — основной строительный блок Icon-программ, однако, в отличие от процедур в Паскале, они (подобно функциям Си и Паскаля) могут возвращать значения; ключевого слова function в Icon нет.

procedure doSomething(aString)
  write(aString)
end

Целенаправленное выполнение

Любое предложение (оператор) языка Icon на самом деле является выражением и может возвращать значения. Выражения в Icon, помимо собственно возвращаемых ими значений, которых может быть любое количество, производит одно из двух состояний — успех англ. success или неудачу англ. failure. Успех или неудача выражений используются вместо булевых значений управляющими структурами Icon. Благодаря этому мы можем писать конструкции типа:

if a := read() then write(a)

Более того, поскольку состояние «неудачи» имеет свойство «всплывать» из вложенных вызовов функций, становясь результатом внешней функции, можно использовать ещё более краткие идиомы, вроде:

while write(read())

для чтения потока ввода и дублирования его в поток вывода (echo).

Операции сравнения, такие > и <, могут быть успешны и производить результат, равный значению их второго аргумента, или неудачны, и не производить никакого результата. Благодаря этому в Icon можно писать выражения типа if a < b < c then ….

Связанная с успехом и неудачей концепция называется в Icon целенаправленным выполнением англ. goal-directed execution. Это способ, благодаря которому вычисление может продолжаться, пока не будет достигнута некая цель. В вышеприведённом примере с echo цель — чтение всего содержимого файла на входе, пока не будет встречен конец файла. Цель задаётся непосредственно, а не с помощью дополнительных проверок кодов возврата или чего то подобного. Целенаправленное вычисление реализуется с помощью бэктрэкинга, это очень мощный механизм.

Генераторы

Серьёзным нововведением языка являются генераторы, обобщающие механизма итераторов[2]. Именно из айкона идея генераторов попала в такие языки, как Python[3].

Thomas W. Christopher, автор Icon Programming Language Handbook пишет: «Самое большое различие между Icon и другими языками программирования — это то, что выражения в Icon — генераторы».

Пример использования генератора:

    procedure main()
    L:=["1","22","333"] # Список строк
    every writes(" ",! L)
    end
    ----
    Выход: 1 22 333

Влияние на последующие языки

Языки Icon и Снобол послужили своего рода полигоном для отработки некоторых идиом программирования, особенно это касается конструкций, содержащих && или || и первым языком, использующим регулярные выражения (хотя и в форме, отличающейся от ныне принятой). Впоследствии эти механизмы были использованы в Unix-среде, в языках C, AWK и Perl.

Вот пример подобной идиомы:

 [ $ringing != 0 ]&&echo Phone ringing!!!

Другой пример, пусть есть конструкция в shell:

xview -root `gtk-shell -t "Which image?" -fs`

Даже если вы не выберете имя файла-картинки, xview все равно будет запущен. А в языке Icon этого никогда бы не произошло.

Аналоги регулярных выражений являются частью самого языка, позволяя использовать системы обработки текста неограниченной сложности.

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

Реализация и диалекты

Авторская реализация Icon, написанная в Аризонском Университете (т. н. аризонский icon) распространяется в соответствии с лицензией GPL.

Icon 9.3 (последняя версия имеющая нативную поддержку Windows) была реализована как компилятор в байт-код с генерацией исполняемого файла содержащего интерпретатор этого байт-кода. Начиная с версии 9.4 аризонский Icon реализован как классический скриптовый язык Unix.

После смерти автора языка, разработка классического аризонского айкона долгое время была заморожена, предпоследняя версия Icon v.9.4.3 была выпущена 14 ноября 2005, однако в настоящее время его поддержка возобновлена его учеником Грегом Таунсендом. 12 апреля 2010 выпущена новая версия транслятора.

Активно развивающейся ветвью Icon является язык Unicon[en], транслятор которого основан на его коде, и также распространяемый под лицензией GNU GPL. Это объектно-ориентированный диалект языка, с улучшенной интеграцией с окружающей средой ОС, включая, к примеру, поддержку взаимодействия с БД. Подобно icon v.9.3, Unicon — это транслятор, ориентированный на генерацию исполняемых файлов.

Продолжает развиваться диалект ObjectIcon, базирующийся на ранних версиях Unicon и являющийся форком последнего. ObjectIcon, как следует из названия, является расширенной объектно-ориентированной версией Icon, в частности, в отличие Unicon, в ObjectIcon есть модификаторы полей доступа к методам. В ObjectIcon сильно изменён состав библиотек (большая часть IPL была сильно переработана — некоторые модули были удалены, были полностью изменены графические библиотеки.), добавлена поддержка Unicode, поддержка пространств имён, добавлены множественное наследование и автоматическая инициализация констант и переменных — и теперь это современный и мощный ООП-язык. Разрабатывается Робертом Парлеттом и распространяется по MIT лицензии. Доступен к загрузке на SourceForge, работает в среде Linux/Unix.

Языки-потомки

Laurence Tratt, один из разработчиков Icon 9.5 и ObjectIcon, также является автором спроектированного по похожим принципам языка Converge[4].

В 2015 году Грегом Таунсенд представил язык Goaldi (от Goal Direction). Это объектно-ориентированный язык, реализованный на Go, и унаследовавший многие черты Icon. В нём реализованы замыкания, параллельное программирование, поддержка пространств имён и работа с юникодом. При этом в нём отсутствуют такие черты айкона, как сканирование строк в качестве базовой операции языка (взамен используется сравнение с обычными регулярными выражениями на уровне функций) и связанные с ней такие типы данных, как множество символов, остсутствует арифметика произвольной точности, а ошибки не преабразуются в обрабатываемые бэктрекингом неудачи, но обрабатываются механизмом исключений[5].

Литература

Примечания

  1. Unicon Sourceforge
  2. Michael Lee Scott. 6.5.4. Generators in Icon // Programming Language Pragmatics. — III ed.. — Morgan Kaufmann, 2009. — С. 268. — 941 с. ISBN 9780080922997.
  3. Steve Holden, David M. Beazley. App. 2. Change since Python 2.0 // Python Web Programming. — Sams Publishing, 2002. — С. 612. — 691 с. ISBN 9780735710900.
  4. Laurence Tratt. Experiences with an Icon-like Expression Evaluation System // Proceedings of the 6th Symposium on Dynamic Languages. — New York, NY, USA: ACM, 2010-01-01. С. 73–80. ISBN 9781450304054. DOI:10.1145/1869631.1869640.
  5. Проект Goaldi на сайте GitHub

Ссылки

Диалекты и дистрибутивы

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии