Go! (programming language)
Paradigm | Multi-paradigm: concurrent, logic, functional, imperative (object-based) | ||
---|---|---|---|
Designed by | Francis McCabe, Keith Clark | ||
First appeared | 2003 | ||
9-30-07 / September 30, 2007 | |||
strong | |||
OS | Unix-like | ||
License | GPLv2 | ||
|
Go! is an agent-based programming language in the tradition of logic-based programming languages like Prolog.[1] It was introduced in a 2003 paper by Francis McCabe and Keith Clark.[2]
Design
The authors of Go! describe it as "a multi-paradigm programming language that 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 needed. Threads in different agents communicate and coordinate using asynchronous messages. Threads within the same agent can also use shared dynamic relations acting as Linda-style tuple stores."[2]
The authors also propose that the language is suitable for representing ontologies due to its integration of logic, functional and imperative styles of programming.[3]
As a deliberate design choice to reduce complexity, Go! does not support inheritance.
Example
The following example illustrates the "ontology-oriented" type and declarations style of Go!:[3]
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 data type, a data type with only data constructors.
The <˜
rule defines an interface type - it indicates 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 indicates 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.
Conflict with Google
In November 2009, Google released a similarly named Go programming language (with no exclamation point). McCabe asked Google to change the name of their language and accused the company of "steam-rolling over us".[1][4] The issue received attention among technology news websites, with some of them characterizing Go! as "obscure".[5]
References
- ↑ 1.0 1.1 1.2 Claburn, Thomas (2009-11-11). "Google 'Go' Name Brings Accusations Of 'Evil'". InformationWeek. Retrieved 2009-11-14.
- ↑ 2.0 2.1 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.
- ↑ 3.0 3.1 Clark, K.L.; McCabe, F.G. (2006). "Ontology oriented programming in go!". Applied Intelligence 24 (3): 189–204. doi:10.1145/860575.860747.
- ↑ "Issue 9 - go - I have already used the name for *MY* programming language". code.google.com. 2009-11-10. Retrieved 2009-11-14.
- ↑ Brownlee, John (2009-11-13). "Google didn’t google "Go" before naming their programming language". Geek.com. Retrieved 2010-01-18.
Further reading
- Clark, K.L.; McCabe, F.G. (2003). "Ontology Oriented Programming in Go!" (PDF).
- 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.
- R. Bordini et al. (2006). "A Survey of Programming Languages and Platforms for Multi-Agent Systems". Informatica 30: 33–44.
- M. Fisher et al. (2007). "Computational Logics and Agents - A Roadmap of Current Technologies and Future Trends". Computational Intelligence 23 (1): 61–91. doi:10.1111/j.1467-8640.2007.00295.x.
- McCabe, Francis G. (February 7, 2007). Lets Go!. Network Agent Press. ISBN 978-0-9754449-1-7.
- C. Varela et al. (2004). On Modelling Agent Systems with Erlang. ACM SIGPLAN Erlang Workshop '04.