Идти! - это агентно-ориентированный язык программирования в традициях логических языков программирования, таких как Prolog . [1] Он был представлен в статье 2003 года Фрэнсисом МакКейбом и Китом Кларком . [2]
Парадигма | Мультипарадигма : параллельная , логическая , функциональная , императивная ( объектно-ориентированная ) |
---|---|
Разработано | Фрэнсис МакКейб , Кейт Кларк |
Впервые появился | 2003 |
Предварительный выпуск | 9-30-07 / 30 сентября 2007 г . |
Печатная дисциплина | сильный |
Операционные системы | Unix-подобный |
Лицензия | GPLv2 |
Под влиянием | |
Пролог [1] |
Дизайн
Авторы Go! описать его как « многопарадигмальный язык программирования , ориентированный на потребности программирования безопасного, производственного и основанного на агентах приложений. Он является многопоточным , строго типизированным и более высоким порядком (в смысле функционального программирования). Он имеет отношение , определения функций и процедур действия. Потоки выполняют процедуры действий, вызывают функции и запрашивают отношения по мере необходимости. Потоки в разных агентах взаимодействуют и координируют свои действия с помощью асинхронных сообщений. Потоки в одном агенте также могут использовать общие динамические отношения, действующие как хранилища кортежей в стиле Линды . " [2]
Авторы также предполагают, что язык подходит для представления онтологий благодаря интеграции логического , функционального и императивного стилей программирования. [3]
Пример
Следующий пример иллюстрирует «ориентированный на онтологию» тип и стиль объявлений Go !: [3]
Пол :: = мужской | женский.человек <~ {dayOfBirth: [] => день . возраст: [] => целое число . sex: [] => Секс. имя: [] => строка . home: [] => строка . живет: [ строка ] {}}. person: [ строка , день , пол, строка ] $ = человек. person (Nm, Born, Sx, Hm) .. { dayOfBirth () => Родился. age () => yearsBetween (сейчас (), Родился). секс () => Sx. name () => Нм. home () => Хм. живет (Pl) : - Pl = дом (). yearsBetween: [ целое число , день ] => целое число. yearsBetween (...) => ..}. newPerson: [ строка , день , пол, строка ] => человек. newPerson (Nm, Born, Sx, Hm) => $ person (Nm, Born, Sx, Hm).
::=
Правило определяет новый алгебраический тип данных , а тип данных только с конструкторами данных.
<~
Правило определяет тип интерфейса - это указывает на то, какие свойства характерны для person
а также дает ограничения типа на эти свойства. Он документирует то, что age
является функциональным свойством с целочисленным значением, которое lives
является унарным отношением по строкам, и что dayOfBirth
это функциональное свойство со значением, которое является объектом типа day
.
$=
Правило типа указывает на то, что существует также метка теории, с функтора person
, для теории , которая определяет характерные свойства person
типа - реализует person
интерфейс - в терминах четырех заданных параметров типов string
, day
, Sex
, и string
.
Конфликт с Google
В ноябре 2009 года Google выпустил язык программирования Go с аналогичным названием (без восклицательного знака ). МакКейб попросил Google изменить название их языка, так как он был обеспокоен тем, что они «катятся по нам паром». [1] [4] Эта проблема привлекла внимание веб-сайтов, посвященных техническим новостям, причем некоторые из них посвящены Go! как «непонятные». [5] Тема, открытая на эту тему, была закрыта разработчиком Google 12 октября 2010 г. с пользовательским статусом «Неудачный» и следующим комментарием: «Есть много компьютерных продуктов и услуг под названием Go. выпуска, было минимальное смешение двух языков ". [6]
Рекомендации
- ^ a b c Клэберн, Томас (11-11-2009). "Название Google" Go "содержит обвинения в" зле " " . Информационная неделя . Проверено 14 ноября 2009 .
- ^ а б Кларк, KL; Маккейб, Ф.Г. (2003). Идти! для многопоточных совещательных агентов . Международная конференция по автономным агентам (AAMAS'03) . С. 964–965. CiteSeerX 10.1.1.117.184 . DOI : 10.1145 / 860575.860747 . ISBN 978-1581136838. S2CID 2047545 .
- ^ а б Кларк, KL; МакКейб, Ф.Г. (2006). «Онтологически ориентированное программирование на ходу!». Прикладной интеллект . 24 (3): 189–204. CiteSeerX 10.1.1.117.184 . DOI : 10.1145 / 860575.860747 . S2CID 2047545 .
- ^ «Проблема 9 - вперед - я уже использовал название для языка программирования * MY *» . 2009-11-10 . Проверено 14 ноября 2009 .
- ^ Браунли, Джон (13 ноября 2009 г.). «Google не гуглил« Go »до того, как назвал свой язык программирования» . Geek.com . Проверено 18 января 2010 .
- ^ «Я уже использовал название для * MY * языка программирования · Проблема № 9 · golang / go» . GitHub . Проверено 4 июля 2019 .
дальнейшее чтение
- Кларк, KL; Маккейб, Ф.Г. (2003). "Онтологически ориентированное программирование в Go!" (PDF) . Цитировать журнал требует
|journal=
( помощь ) - Кларк, KL; Маккейб, Ф.Г. (2004). «Go! - многопарадигмальный язык программирования для реализации многопоточных агентов» . Анналы математики и искусственного интеллекта . 41 (2–4): 171–206. CiteSeerX 10.1.1.133.1069 . DOI : 10,1023 / Б: AMAI.0000031195.87297.d9 . S2CID 6992205 .
- Р. Бордини; и другие. (2006). «Обзор языков программирования и платформ для многоагентных систем» . Informatica . 30 : 33–44. Архивировано из оригинала на 2009-11-15.
- М. Фишер; и другие. (2007). «Вычислительная логика и агенты - дорожная карта текущих технологий и будущих тенденций» . Вычислительный интеллект . 23 (1): 61–91. CiteSeerX 10.1.1.114.6149 . DOI : 10.1111 / j.1467-8640.2007.00295.x . S2CID 3393868 . Архивировано из оригинала на 2013-01-06.
- МакКейб, Фрэнсис Г. (7 февраля 2007 г.). Пойдем! . Агент администрирования Нажмите. ISBN 978-0-9754449-1-7.
- К. Варела; и другие. (2004). О моделировании агентских систем с помощью Erlang . ACM SIGPLAN Erlang Workshop '04 .
Внешние ссылки
- Страница на Github
- Пример кода на 99-bottles-of-beer.net