This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
No issues specified. Please specify issues, or remove this template. |
This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. (November 2009) |
Go! is a concurrent programming language, first publicly documented by Keith Clark and Francis McCabe in 2003 [1]. It is oriented to the needs of programming secure, production quality, agent based applications. It is multi-threaded, strongly typed and higher order (in the functional programming sense). It has relation, function and action procedure definitions. Threads execute action procedures, calling functions and querying relations as need be. Threads in different agents communicate and coordinate using asynchronous messages. Threads within the same agent can also use shared dynamic relations acting as memory stores.
Go! | |
---|---|
Paradigm | concurrent |
Designed by | Francis McCabe, Keith Clark |
First appeared | 2003 |
License | GPLv2 |
Its nature as a a multi-paradigm programming language, integrating logic, functional, object oriented and imperative programming styles, is particularly applied to ontology-based modeling, as exploited for the Semantic Web in allowing a type system where OWL classes can be represented in the type system [2].
Since the launch of Google's programming language Go, Go! has become the subject of a naming controversy that is still to be resolved [3] [4].
Example
The following example illustrates the 'ontology-oriented' type and declarations style of 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).
The ::= rule defines a new algebraic type - a data type with only data constructors.
The <˜ rule defines an interface type - it tells us what properties are characteristic of a person and also gives type constraints on these properties. It documents that age is a functional property with an integer value, that lives is a unary relation over strings, and that dayOfBirth is a functional property with a value that is an object of type day.
The $= type rule tells us that there is also a theory label, with the functor person, for a theory that defines the characteristic properties of the person type - implements the person interface - in terms of four given parameters of types string, day, Gender and string.
Footnotes
- ^ Clark and McCabe, AAMAS'03, 2003
- ^ Clark and McCabe, Applied Intelligence, 2006
- ^ http://www.informationweek.com/news/software/web_services/showArticle.jhtml?articleID=221601351
- ^ http://code.google.com/p/go/issues/detail?id=9
References
- Clark, K.L.; McCabe, F.G. (2003). "Go! for multi-threaded deliberative agents". International Conference on Autonomous Agents (AAMAS'03): 964–965. doi:10.1145/860575.860747.
- Clark, K.L.; McCabe, F.G. (2003). "Ontology Oriented Programming in Go!" (PDF).
{{cite journal}}
: Cite journal requires|journal=
(help) - Clark, K.L.; McCabe, F.G. (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.
- Clark, K.L.; McCabe, F.G. (2006). "Ontology oriented programming in go!". Applied Intelligence. 24 (3): 189–204. doi:10.1145/860575.860747.