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