Go! (programming language)

This is an old revision of this page, as edited by Cybercobra (talk | contribs) at 14:23, 12 November 2009 (Communication Model: caps). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

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!
Paradigmconcurrent
Designed byFrancis McCabe, Keith Clark
First appeared2003
Preview release
9-30-07 / September 30, 2007 (2007-09-30)
OSUnix-like
LicenseGPLv2

Its nature as a a multi-paradigm programming language, integrating logic, functional, object oriented and imperative programming styles [2], 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 [3]. The design of Go!, according to Bordini et al.'s survey [2], also took into consideration critical issues such as security, transparency, and integrity, in regards to the adoption of logic programming technology. Agents in Go! contain both reactive and deliberative aspects, and coordinate using BDI structures [4].

Since the launch of Google's programming language, Go! and Go have become the subject of a naming controversy that is still to be resolved [5] [6].

Communication model

Threads within a single Go! process, hence in the same agent, can also communicate by manipulating dynamic relation objects, comparable with Linda tuple stores [2], used to coordinate their activities. A related combination of tuple-based shared stores and Semantics has been taken up as the communication mechanism in the approaches of TripCom [7] and SOA4All [8].

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

  1. ^ Clark and McCabe, AAMAS'03, 2003
  2. ^ a b c Bordini et al., Informatica, 2006
  3. ^ Clark and McCabe, Applied Intelligence, 2006
  4. ^ Fisher et al., Computational Intelligence, 2007
  5. ^ http://www.informationweek.com/news/software/web_services/showArticle.jhtml?articleID=221601351
  6. ^ http://code.google.com/p/go/issues/detail?id=9
  7. ^ www.tripcom.org/
  8. ^ www.soa4all.eu

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.
  • R. Bordini; et al. (2006). "A Survey of Programming Languages and Platforms for Multi-Agent Systems". Informatica. 30: 33–44. {{cite journal}}: Explicit use of et al. in: |author= (help)
  • M. Fisher; et al. (2007). "Computational Logics and Agents - A Roadmap of Current Technologies and Future Trends". Computational Intelligence. 23 (1): 61–91. {{cite journal}}: Explicit use of et al. in: |author= (help)