This article may have been previously nominated for deletion: Wikipedia:Articles for deletion/Go! (programming language) exists. It is proposed that this article be deleted because of the following concern:
If you can address this concern by improving, copyediting, sourcing, renaming, or merging the page, please edit this page and do so. You may remove this message if you improve the article or otherwise object to deletion for any reason. Although not required, you are encouraged to explain why you object to the deletion, either in your edit summary or on the talk page. If this template is removed, do not replace it. This message has remained in place for seven days, so the article may be deleted without further notice. Find sources: "Go!" programming language – news · newspapers · books · scholar · JSTOR Nominator: Please consider notifying the author/project: {{subst:proposed deletion notify|Go! (programming language)|concern=Non notable language. All the sources seem to be papers and a book by the author of the language. Per [[WP:N]], sources should be secondary sources independent of the subject.}} ~~~~ Timestamp: 20091112142242 14:22, 12 November 2009 (UTC) Administrators: delete |
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 |
Preview release | 9-30-07
/ September 30, 2007 |
OS | Unix-like |
License | GPLv2 |
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
- ^ Clark and McCabe, AAMAS'03, 2003
- ^ a b c Bordini et al., Informatica, 2006
- ^ Clark and McCabe, Applied Intelligence, 2006
- ^ Fisher et al., Computational Intelligence, 2007
- ^ http://www.informationweek.com/news/software/web_services/showArticle.jhtml?articleID=221601351
- ^ http://code.google.com/p/go/issues/detail?id=9
- ^ www.tripcom.org/
- ^ 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)