WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Go!
Класс языка многопоточный
Появился в 2003
Автор Фрэнсис МакКейб, Кейт Кларк
Испытал влияние Prolog[1]
Лицензия GPLv2
Платформа UNIX-подобные операционные системы

Go! — многопоточный язык программирования, разработанный Кейтом Кларком и Фрэнсисом Маккейбом в 2003 году. Мультипарадигмален, ориентирован на безопасное программирование и распределённость приложений (с применением агентной архитектуры), со строгой типизацией. Есть поддержка определений функций и процедур, а также взаимосвязей между ними. Потоки исполняют процедуры, вызывают функции и запрашивают необходимые связи по мере надобности. Потоки разных агентов взаимодействуют между собой при помощи асинхронных сообщений. Потоки одного агента могут устанавливать динамические связи друг с другом, образовывая своего рода общую память.

Благодаря своей мультипарадигменной природе язык обладает поддержкой логического и функционального программирования, есть поддержка объектно-ориентированного и императивного стилей программирования, а также в полной мере поддерживается онтологическое моделирование, наподобие системы типов, используемой для Семантической паутины, благодаря чему 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.

Примечания

Ссылки

Спор разрешен. Гугл оставляет название Go.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии