Go!
Go! — многопоточный язык программирования, разработанный Кейтом Кларком и Фрэнсисом Маккейбом в 2003 году. Мультипарадигмален, ориентирован на безопасное программирование и распределённость приложений (с применением агентной архитектуры), со строгой типизацией. Есть поддержка определений функций и процедур, а также взаимосвязей между ними. Потоки исполняют процедуры, вызывают функции и запрашивают необходимые связи по мере надобности. Потоки разных агентов взаимодействуют между собой при помощи асинхронных сообщений. Потоки одного агента могут устанавливать динамические связи друг с другом, образовывая своего рода общую память.
Go! | |
---|---|
Класс языка | многопоточный |
Появился в | 2003 |
Автор | Фрэнсис МакКейб, Кейт Кларк |
Испытал влияние | Prolog[1] |
Лицензия | GPLv2 |
Платформа | UNIX-подобные операционные системы |
Благодаря своей мультипарадигменной природе язык обладает поддержкой логического и функционального программирования, есть поддержка объектно-ориентированного и императивного стилей программирования, а также в полной мере поддерживается онтологическое моделирование, наподобие системы типов, используемой для Семантической паутины, благодаря чему OWL-классы могут быть представлены в виде системы типов[прояснить][2].
В связи с запуском корпорацией Google собственного языка программирования Go, Go! стал жертвой коллизии наименований, причём этот конфликт не разрешён до сих пор[1].
Пример
Нижеследующий пример иллюстрирует 'онтологический' тип и стиль объявлений, принятый в 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.
Примечания
- Google 'Go' Name Brings Accusations Of 'Evil' — InformationWeek
- Clark and McCabe, Applied Intelligence, 2006
Ссылки
- Страница скачивания
- Примеры кода на 99-bottles-of-beer.net (недоступная ссылка)
- Lets Go! — книга Фрэнисиса МаКейба
- Clark, Keith L.; McCabe, Francis G. Go! for multi-threaded deliberative agents (неопр.) // International Conference on Autonomous Agents. — 2003. — С. 964—965. — doi:10.1145/860575.860747.
- Clark, K.L.; McCabe, F.G. Ontology Oriented Programming in Go! (неопр.). — 2003.
- Clark, K.L.; McCabe, F.G. Go!—A Multi-Paradigm Programming Language for Implementing Multi-Threaded Agents (англ.) // Annals of Mathematics and Artificial Intelligence : journal. — 2004. — Vol. 41, no. 2—4. — P. 171—206. — doi:10.1023/B:AMAI.0000031195.87297.d9.
- Clark, K.L.; McCabe, F.G. Ontology oriented programming in go! (неопр.) // Applied Intelligence. — 2006. — Т. 24, № 3. — С. 189—204. — doi:10.1145/860575.860747.