- Go! (язык программирования)
-
Статью, посвященную языку программирования, созданного компанией Google Inc. см. Go (язык программирования)
Go! Класс языка: Появился в: 2003 г.
Автор(ы): Фрэнсис МакКейб, Кейт Кларк
Лицензия Go! — многопоточный язык программирования, впервые документацию по которому публично представили Кейт Кларк и Фрэнсис МакКейб в 2003 году. По своей сути это Мультипарадигмальный язык программирования, ориентированный на требования программной безопасности, качества продукта, распределённость приложений (то есть с применением агентов). Он мультипоточен, со строгой типизацией, высокоуровневый. Есть поддержка определений функций и процедур, а также взаимосвязей между ними. Потоки исполняют процедуры, вызывают функции и запрашивают необходимые связи по мере надобности. Потоки разных агентов взаимодействуют между собой при помощи асинхронных сообщений. Потоки одного агента могут устанавливать динамические связи друг с другом, образовывая своего рода общую память.
Благодаря своей мультипарадигменной природе язык обладает поддержкой логического программирования, функционального, есть поддержка объектно-ориентированного и императивного стилей программирования, а также в полной мере поддерживается онтологическое моделирование, наподобие системы типов, используемой для Семантической паутины, благодаря чему OWL-классы могут быть представлены в виде системы типов[1].
В связи с запуском корпорацией Google собственного языка программирования Go, Go! стал жертвой коллизии наименований, причём этот конфликт не разрешён до сих пор[2].
Содержание
Пример
Нижеследующий пример иллюстрирует 'онтологический' тип и стиль объявлений, принятый в Go!.
Gender::= male | female. person <˜ {dayOfBirth:[]=>day. age:[]=>integer. gender:[]=>Gender. name:[]=>string. home:[]=>string. lives:[string]{}}. person:[string,day,Gender,string]$=person. person(Nm,Born,Sx,Hm)..{ dayOfBirth()=>Born. age() => yearsBetween(now(),Born). gender()=>Sx. name()=>Nm. home()=>Hm. lives(Pl) :- Pl=home(). yearsBetween:[integer,day]=>integer. yearsBetween(...) => .. }. newPerson:[string,day,Gender,string]=>person. newPerson(Nm,Born,Sx,Hm)=>$person(Nm,Born,Sx,Hm).
Правило ::= определяет новый алгебраический тип — тип данных, состоящий только из конструкторов данных.
Правило <˜ определяет тип интерфейса — это говорит о том, какие именно свойства характеризуют в данном случае человека (person) а также накладывает типовые ограничения (constraints) на эти свойства. Это фиксирует то, что возраст (age) — функциональное свойство с целыми значениями, а параметр 'проживает с' (lives) — унарное отношение для строк, а параметр 'День Рождения' (dayOfBirth) — функциональное свойство, указывающее день объекта.
Правило типа $= говорит о том, что присутствует также пометка как теории (предположения) с указанием конкретной персоны; сама теория определяет характеристики типа человека (то есть своего рода реализация интерфейса человека), выражающиеся в данных четырёх параметрах с типами: string, day, Gender и string.
См. также
Примечания
- ↑ Clark and McCabe, Applied Intelligence, 2006
- ↑ Google 'Go' Name Brings Accusations Of 'Evil' — InformationWeek
Спор разрешен. Гугл оставляет название GO.
Ссылки
- (2003) «Go! for multi-threaded deliberative agents». International Conference on Autonomous Agents: 964 - 965. DOI:10.1145/860575.860747.
- (2003)."Ontology Oriented Programming in Go!".
- (2004) «Go!—A Multi-Paradigm Programming Language for Implementing Multi-Threaded Agents». Annals of Mathematics and Artificial Intelligence 41 (2-4): 171 - 206. DOI:10.1023/B:AMAI.0000031195.87297.d9.
- (2006) «Ontology oriented programming in go!». Applied Intelligence 24 (3): 189 - 204. DOI:10.1145/860575.860747.
Категории:- Появились в 2003 году
- Языки программирования по алфавиту
- Языки программирования, появившиеся в 2000-х
Wikimedia Foundation. 2010.