From Surf Wiki (app.surf) — the open knowledge base
Go! (programming language)
Multi-paradigm programming language
Multi-paradigm programming language
| Field | Value |
|---|---|
| name | Go! |
| year | |
| designer | Francis McCabe, Keith Clark |
| latest_test_version | 9-30-07 |
| latest_test_date | |
| typing | strong |
| influenced_by | Prolog |
| license | GPLv2 |
| operating_system | Unix-like |
Multi-paradigm: concurrent, logic, functional, imperative (object-based)
Go! is an agent-based programming language in the tradition of logic-based programming languages like Prolog. It was introduced in a 2003 paper by Francis McCabe and Keith Clark.
Design
The authors of Go! describe it as "a multi-paradigm programming language that is oriented to the needs of programming secure, production quality and 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."
The authors also propose that the language is suitable for representing ontologies due to its integration of logic, functional and imperative styles of programming.
Example
The following example illustrates the "ontology-oriented" type and declarations style of Go!:
Sex ::= male | female.
person <~ {dayOfBirth:[] => day.
age:[] => integer.
sex:[] => Sex.
name:[] => string.
home:[] => string.
lives:[string]{}}.
person:[string, day, Sex, string] $= person.
person(Nm, Born, Sx, Hm)..{
dayOfBirth() => Born.
age() => yearsBetween(now(), Born).
sex() => Sx.
name() => Nm.
home() => Hm.
lives(Pl) :- Pl = home().
yearsBetween:[integer, day] => integer.
yearsBetween(...) => ..
}.
newPerson:[string, day, Sex, 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 `
- The
$=type rule indicates that there is also a theory label, with the functorperson, for a theory that defines the characteristic properties of thepersontype - implements thepersoninterface - in terms of four given parameters of typesstring,day,Sex, andstring.
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 as he was concerned they were "steam-rolling over us". The issue received attention among technology news websites, with some of them characterizing Go! as "obscure". The issue thread opened on the subject was closed by a Google developer on 12 October 2010 with the custom status "Unfortunate" and with the following comment: "there are many computing products and services named Go. In the 11 months since our release, there has been minimal confusion of the two languages."
References
References
- Claburn, Thomas. (2009-11-11). "Google 'Go' Name Brings Accusations Of 'Evil'".
- (2003). "Proceedings of the second international joint conference on Autonomous agents and multiagent systems".
- (2006). "Ontology oriented programming in go!". Applied Intelligence.
- (2009-11-10). "Issue 9 - go - I have already used the name for MY programming language".
- Brownlee, John. (2009-11-13). "Google didn't google "Go" before naming their programming language". Geek.com.
- "I have already used the name for MY programming language · Issue #9 · golang/go".
This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.
Ask Mako anything about Go! (programming language) — get instant answers, deeper analysis, and related topics.
Research with MakoFree with your Surf account
Create a free account to save articles, ask Mako questions, and organize your research.
Sign up freeThis content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.
Report