Icon (язык программирования)

Icon (язык программирования)
Icon
Iconlogo.gif
Семантика:

мультипарадигменный: императивный, логический

Тип исполнения:

интерпретатор

Появился в:

1974

Автор(ы):

Ralph E. Griswold

Типизация данных:

динамическая

Основные реализации:

Icon, Jcon, Unicon

Испытал влияние:

Снобол, Algol

Повлиял на:

Python

Icon
Icon-pl.png
Скриншот WinIcon v.9.3.2, запущен пример VQUEENS.ICN, часть IPL.
Тип

Транслятор

Разработчик

Ralph E. Griswold, Gregg Townsend

Операционная система

Unix (тестируются сборки под Linux и BSD), MacOS и Microsoft Windows с Cygwin

Последняя версия

9.5.0 (11 августа, 2010)

Лицензия

GNU GPL

Сайт

http://www.cs.arizona.edu/icon/


Unicon
UniconIDE.png
Скриншот UniconIDE v.12.0.2
Тип

Транслятор

Разработчик

Clint Jeffery

Операционная система

Linux и Microsoft Windows

Последняя версия

12.0.2 (3 февраля, 2012)

Лицензия

GNU GPL

Сайт

http://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 цель — чтение всего содержимого файла на входе, пока не будет встречен конец файла. Цель задаётся непосредственно, а не с помощью дополнительных проверок кодов возврата или чего то подобного. Целенаправленное вычисление реализуется с помощью бэктрэкинга, это очень мощный механизм.

Генераторы

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 (англ.), транслятор которого основан на его коде, и также распространяемый под лицензией GNU GPL. Это объектно-ориентированный диалект языка, с улучшенной интеграцией с окружающей средой ОС, включая, к примеру, поддержку взаимодействия с БД. Подобно icon v.9.3, Unicon — это транслятор ориентированный на генерацию исполняемых файлов.

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

В последнее время в связи с небольшим всплеском интереса к Icon несколькими энтузиастами был создан проект IconDevelPack целями которого стали массовость и доступность Icon. IconDevelPack не является самостоятельным приложением,а является небольшим комплектом инструментов разработчика (распространяемых под GPL и подобными лицензиями), интегрированных в единый пакет с собственным установщиком. Пакет содержит: редактор (в первых версиях - jEdit, в текущих заменен на X-ConText), транслятор и его компоненты (icont,Wi и т.д), небольшой комплект пособий по Icon (справочники на русском и английском языке), также пакет содержит графическую оболочку к компилятору icont(создана непосредственной командой IDP и написана на Unicon), которая носит название gIcont. Пакет IDP (сокращение от IconDevelPack) также доступен на Code Google и распространяется абсолютно бесплатно. Стоит отметить и то, что пакет IDP собран под платформу Windows (хотя,планируются и версии под Linux), а установщик написан на AutoIt.

Источники

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Icon (язык программирования)" в других словарях:

  • Язык программирования — Язык программирования  формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия,… …   Википедия

  • Язык программирования Си — Си Семантика: процедурный Тип исполнения: компилируемый Появился в: 1969 73 г. Автор(ы): Кен Томпсон, Денис Ритчи Типизация данных: статическая Основные реализации …   Википедия

  • Язык программирования C — Си Семантика: процедурный Тип исполнения: компилируемый Появился в: 1969 73 г. Автор(ы): Кен Томпсон, Денис Ритчи Типизация данных: статическая Основные реализации …   Википедия

  • Язык программирования Рубин — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Язык программирования Java — Java Класс языка: объектно ориентированный, структурный, императивный Появился в: 1995 г. Автор(ы): Sun Microsystems Последняя версия: Java Standard Edition 6 (1.6.14) Т …   Википедия

  • Язык программирования Dylan — Dylan  динамический объектно ориентированный язык программирования, нацеленный на быструю разработку программ, разработанный, прежде всего, усилиями множественное наследование, полиморфизм и многие другие функции. Язык общего назначения,… …   Википедия

  • Occam (язык программирования) — Язык программирования Оккам (англ. Occam) это процедурный язык параллельного программирования высокого уровня, разработанный в начале 80 х годов группой учёных из Оксфорда под руководством Дэвида Мэя (англ. David May) по заданию английской… …   Википедия

  • Си (язык программирования) — У этого термина существуют и другие значения, см. Си. Запрос «Язык программирования Си» перенаправляется сюда; см. также другие значения. Си Класс языка: процедурный Тип исполнения: компилируемый Появился в: 1969 1973 Автор( …   Википедия

  • Ада (язык программирования) — У этого термина существуют и другие значения, см. Ада. Ада Семантика: мультипарадигменный: конкурентное, обобщённое, императивное, объектно ориентированное, распределённое программирование Тип исполнения: компилируемый Появился в: 1980 …   Википедия

  • D (язык программирования) — У этого термина существуют и другие значения, см. D. D Семантика: мультипарадигменный: императивное, объектно ориентированное, обобщённое программирование Тип исполнения: компилятор Появился в: 1999 Автор(ы) …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»