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

Поделись знанием:
Перейти к: навигация, поиск
Icon
Семантика:

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

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

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

Появился в:

1974

Автор:

Ralph E. Griswold

Система типов:

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

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

Icon, Jcon, Unicon

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

Снобол, Algol

Повлиял на:

Python

Icon

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

Транслятор

Разработчик

Ralph E. Griswold, Gregg Townsend

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

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

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

9.5.1 (6 июня, 2013)

Лицензия

GNU GPL

Сайт

[www.cs.arizona.edu/icon/ arizona.edu/icon/]

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

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

Транслятор

Разработчик

Clint Jeffery

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

Linux и Microsoft Windows

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

12.1.0[1] (27 августа 2012)

Лицензия

GNU GPL

Сайт

[unicon.sf.net/ sf.net]

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

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].

Напишите отзыв о статье "Icon (язык программирования)"

Литература

  • Ralph E. Griswold and Madge T. Griswold. [www.cs.arizona.edu/icon/ftp/doc/lb1up.pdf The Icon Programming Language]. — Third Edition. — Peer-to-Peer Communications, 1996. — ISBN 1-57398-001-3.
  • Ralph E. Griswold, Clinton L. Jeffery, and Gregg M. Townsend. [www.cs.arizona.edu/icon/ftp/doc/gb1up.pdf Graphics Programming in Icon]. — Peer-to-Peer Communications, 1998. — ISBN 1-57398-009-9.
  • Ralph E. Griswold and Madge T. Griswold. [www.cs.arizona.edu/icon/ftp/doc/ib1up.pdf The Implementation of the Icon Programming Language]. — Princeton University Press, 1986. — ISBN 0-691-08431-9,.
  • Alan D. Corré. [www2.cs.uidaho.edu/~jeffery/icon/humanists/humanist.pdf Icon Programming for Humanists]. — Goal-Directed Press, 2010.
  • Thomas W. Christopher. [www.tools-of-computing.com/tc/CS/iconprog.pdf Icon Programming Language Handbook]. — Tools of Computing, 1996.
  • Peter H. Salus. PART V—Icon // HPL: Vol. II: Imperative Programming Languages. — Macmillan Technical Publishing, 1998. — (Handbook of Programming Languages). — ISBN 9781578700097.
  • O. Richard Fonnorow [books.google.ru/books?id=O90MzD9_kawC&pg=PA75 Users Press Icon into Commercial Service] // Computerworld. — 1985. — 18 ноября. — С. 75-92.
  • О. Г. Чанышев. Основные элементы языка программирования Icon. — Омск: Изд-во ОмГУ, 2004. — 55 с. — ISBN 5-7779-0523-4.

Примечания

  1. [sourceforge.net/projects/unicon/files/ 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. [books.google.ru/books?id=NmkD220i9KsC&pg=PA612 App. 2. Change since Python 2.0] // Python Web Programming. — Sams Publishing, 2002. — С. 612. — 691 с. — ISBN 9780735710900.
  4. Laurence Tratt [tratt.net/laurie/research/pubs/html/tratt__experiences_with_an_icon_like_expression_evaluation_system/ 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.

Ссылки

  • [www.cs.arizona.edu/icon/ www.cs.arizona.edu/icon] — Официальный сайт языка
  • [progopedia.ru/language/icon/ Энциклопедия языков программирования] — Icon в Прогопедии
  • [lhs-blog.info/topics/programming/iconlang/ Записки пользователя Icon] Блог, целиком посвященный Icon

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

  • [unicon.sourceforge.net Проект Unicon] на сайте SourceForge.net.
  • [objecticon.sourceforge.net Проект ObjectIcon] на сайте SourceForge.net
  • [code.google.com/p/icon-development-package/ IconDevelopmentPackage] — комплект приложений для разработки программ на языке программирования Icon.

Отрывок, характеризующий Icon (язык программирования)

– Я рад, что высказал всё. Может быть, вам неприятно, вы меня извините, – сказал он, успокоивая Пьера, вместо того чтоб быть успокоиваемым им, – но я надеюсь, что не оскорбил вас. Я имею правило говорить всё прямо… Как же мне передать? Вы приедете обедать к Ростовым?
И Борис, видимо свалив с себя тяжелую обязанность, сам выйдя из неловкого положения и поставив в него другого, сделался опять совершенно приятен.
– Нет, послушайте, – сказал Пьер, успокоиваясь. – Вы удивительный человек. То, что вы сейчас сказали, очень хорошо, очень хорошо. Разумеется, вы меня не знаете. Мы так давно не видались…детьми еще… Вы можете предполагать во мне… Я вас понимаю, очень понимаю. Я бы этого не сделал, у меня недостало бы духу, но это прекрасно. Я очень рад, что познакомился с вами. Странно, – прибавил он, помолчав и улыбаясь, – что вы во мне предполагали! – Он засмеялся. – Ну, да что ж? Мы познакомимся с вами лучше. Пожалуйста. – Он пожал руку Борису. – Вы знаете ли, я ни разу не был у графа. Он меня не звал… Мне его жалко, как человека… Но что же делать?
– И вы думаете, что Наполеон успеет переправить армию? – спросил Борис, улыбаясь.
Пьер понял, что Борис хотел переменить разговор, и, соглашаясь с ним, начал излагать выгоды и невыгоды булонского предприятия.
Лакей пришел вызвать Бориса к княгине. Княгиня уезжала. Пьер обещался приехать обедать затем, чтобы ближе сойтись с Борисом, крепко жал его руку, ласково глядя ему в глаза через очки… По уходе его Пьер долго еще ходил по комнате, уже не пронзая невидимого врага шпагой, а улыбаясь при воспоминании об этом милом, умном и твердом молодом человеке.
Как это бывает в первой молодости и особенно в одиноком положении, он почувствовал беспричинную нежность к этому молодому человеку и обещал себе непременно подружиться с ним.
Князь Василий провожал княгиню. Княгиня держала платок у глаз, и лицо ее было в слезах.
– Это ужасно! ужасно! – говорила она, – но чего бы мне ни стоило, я исполню свой долг. Я приеду ночевать. Его нельзя так оставить. Каждая минута дорога. Я не понимаю, чего мешкают княжны. Может, Бог поможет мне найти средство его приготовить!… Adieu, mon prince, que le bon Dieu vous soutienne… [Прощайте, князь, да поддержит вас Бог.]
– Adieu, ma bonne, [Прощайте, моя милая,] – отвечал князь Василий, повертываясь от нее.
– Ах, он в ужасном положении, – сказала мать сыну, когда они опять садились в карету. – Он почти никого не узнает.
– Я не понимаю, маменька, какие его отношения к Пьеру? – спросил сын.
– Всё скажет завещание, мой друг; от него и наша судьба зависит…
– Но почему вы думаете, что он оставит что нибудь нам?
– Ах, мой друг! Он так богат, а мы так бедны!
– Ну, это еще недостаточная причина, маменька.
– Ах, Боже мой! Боже мой! Как он плох! – восклицала мать.


Когда Анна Михайловна уехала с сыном к графу Кириллу Владимировичу Безухому, графиня Ростова долго сидела одна, прикладывая платок к глазам. Наконец, она позвонила.
– Что вы, милая, – сказала она сердито девушке, которая заставила себя ждать несколько минут. – Не хотите служить, что ли? Так я вам найду место.
Графиня была расстроена горем и унизительною бедностью своей подруги и поэтому была не в духе, что выражалось у нее всегда наименованием горничной «милая» и «вы».
– Виновата с, – сказала горничная.
– Попросите ко мне графа.
Граф, переваливаясь, подошел к жене с несколько виноватым видом, как и всегда.
– Ну, графинюшка! Какое saute au madere [сотэ на мадере] из рябчиков будет, ma chere! Я попробовал; не даром я за Тараску тысячу рублей дал. Стоит!
Он сел подле жены, облокотив молодецки руки на колена и взъерошивая седые волосы.
– Что прикажете, графинюшка?
– Вот что, мой друг, – что это у тебя запачкано здесь? – сказала она, указывая на жилет. – Это сотэ, верно, – прибавила она улыбаясь. – Вот что, граф: мне денег нужно.
Лицо ее стало печально.
– Ах, графинюшка!…
И граф засуетился, доставая бумажник.
– Мне много надо, граф, мне пятьсот рублей надо.
И она, достав батистовый платок, терла им жилет мужа.
– Сейчас, сейчас. Эй, кто там? – крикнул он таким голосом, каким кричат только люди, уверенные, что те, кого они кличут, стремглав бросятся на их зов. – Послать ко мне Митеньку!
Митенька, тот дворянский сын, воспитанный у графа, который теперь заведывал всеми его делами, тихими шагами вошел в комнату.
– Вот что, мой милый, – сказал граф вошедшему почтительному молодому человеку. – Принеси ты мне… – он задумался. – Да, 700 рублей, да. Да смотри, таких рваных и грязных, как тот раз, не приноси, а хороших, для графини.
– Да, Митенька, пожалуйста, чтоб чистенькие, – сказала графиня, грустно вздыхая.
– Ваше сиятельство, когда прикажете доставить? – сказал Митенька. – Изволите знать, что… Впрочем, не извольте беспокоиться, – прибавил он, заметив, как граф уже начал тяжело и часто дышать, что всегда было признаком начинавшегося гнева. – Я было и запамятовал… Сию минуту прикажете доставить?
– Да, да, то то, принеси. Вот графине отдай.
– Экое золото у меня этот Митенька, – прибавил граф улыбаясь, когда молодой человек вышел. – Нет того, чтобы нельзя. Я же этого терпеть не могу. Всё можно.
– Ах, деньги, граф, деньги, сколько от них горя на свете! – сказала графиня. – А эти деньги мне очень нужны.
– Вы, графинюшка, мотовка известная, – проговорил граф и, поцеловав у жены руку, ушел опять в кабинет.
Когда Анна Михайловна вернулась опять от Безухого, у графини лежали уже деньги, всё новенькими бумажками, под платком на столике, и Анна Михайловна заметила, что графиня чем то растревожена.
– Ну, что, мой друг? – спросила графиня.
– Ах, в каком он ужасном положении! Его узнать нельзя, он так плох, так плох; я минутку побыла и двух слов не сказала…
– Annette, ради Бога, не откажи мне, – сказала вдруг графиня, краснея, что так странно было при ее немолодом, худом и важном лице, доставая из под платка деньги.
Анна Михайловна мгновенно поняла, в чем дело, и уж нагнулась, чтобы в должную минуту ловко обнять графиню.
– Вот Борису от меня, на шитье мундира…
Анна Михайловна уж обнимала ее и плакала. Графиня плакала тоже. Плакали они о том, что они дружны; и о том, что они добры; и о том, что они, подруги молодости, заняты таким низким предметом – деньгами; и о том, что молодость их прошла… Но слезы обеих были приятны…


Графиня Ростова с дочерьми и уже с большим числом гостей сидела в гостиной. Граф провел гостей мужчин в кабинет, предлагая им свою охотницкую коллекцию турецких трубок. Изредка он выходил и спрашивал: не приехала ли? Ждали Марью Дмитриевну Ахросимову, прозванную в обществе le terrible dragon, [страшный дракон,] даму знаменитую не богатством, не почестями, но прямотой ума и откровенною простотой обращения. Марью Дмитриевну знала царская фамилия, знала вся Москва и весь Петербург, и оба города, удивляясь ей, втихомолку посмеивались над ее грубостью, рассказывали про нее анекдоты; тем не менее все без исключения уважали и боялись ее.
В кабинете, полном дыма, шел разговор о войне, которая была объявлена манифестом, о наборе. Манифеста еще никто не читал, но все знали о его появлении. Граф сидел на отоманке между двумя курившими и разговаривавшими соседями. Граф сам не курил и не говорил, а наклоняя голову, то на один бок, то на другой, с видимым удовольствием смотрел на куривших и слушал разговор двух соседей своих, которых он стравил между собой.
Один из говоривших был штатский, с морщинистым, желчным и бритым худым лицом, человек, уже приближавшийся к старости, хотя и одетый, как самый модный молодой человек; он сидел с ногами на отоманке с видом домашнего человека и, сбоку запустив себе далеко в рот янтарь, порывисто втягивал дым и жмурился. Это был старый холостяк Шиншин, двоюродный брат графини, злой язык, как про него говорили в московских гостиных. Он, казалось, снисходил до своего собеседника. Другой, свежий, розовый, гвардейский офицер, безупречно вымытый, застегнутый и причесанный, держал янтарь у середины рта и розовыми губами слегка вытягивал дымок, выпуская его колечками из красивого рта. Это был тот поручик Берг, офицер Семеновского полка, с которым Борис ехал вместе в полк и которым Наташа дразнила Веру, старшую графиню, называя Берга ее женихом. Граф сидел между ними и внимательно слушал. Самое приятное для графа занятие, за исключением игры в бостон, которую он очень любил, было положение слушающего, особенно когда ему удавалось стравить двух говорливых собеседников.
– Ну, как же, батюшка, mon tres honorable [почтеннейший] Альфонс Карлыч, – говорил Шиншин, посмеиваясь и соединяя (в чем и состояла особенность его речи) самые народные русские выражения с изысканными французскими фразами. – Vous comptez vous faire des rentes sur l'etat, [Вы рассчитываете иметь доход с казны,] с роты доходец получать хотите?
– Нет с, Петр Николаич, я только желаю показать, что в кавалерии выгод гораздо меньше против пехоты. Вот теперь сообразите, Петр Николаич, мое положение…
Берг говорил всегда очень точно, спокойно и учтиво. Разговор его всегда касался только его одного; он всегда спокойно молчал, пока говорили о чем нибудь, не имеющем прямого к нему отношения. И молчать таким образом он мог несколько часов, не испытывая и не производя в других ни малейшего замешательства. Но как скоро разговор касался его лично, он начинал говорить пространно и с видимым удовольствием.
– Сообразите мое положение, Петр Николаич: будь я в кавалерии, я бы получал не более двухсот рублей в треть, даже и в чине поручика; а теперь я получаю двести тридцать, – говорил он с радостною, приятною улыбкой, оглядывая Шиншина и графа, как будто для него было очевидно, что его успех всегда будет составлять главную цель желаний всех остальных людей.
– Кроме того, Петр Николаич, перейдя в гвардию, я на виду, – продолжал Берг, – и вакансии в гвардейской пехоте гораздо чаще. Потом, сами сообразите, как я мог устроиться из двухсот тридцати рублей. А я откладываю и еще отцу посылаю, – продолжал он, пуская колечко.