Go! (programming language)
{{Short description|Multi-paradigm programming language}}
{{for|the language released in 2009 by Google|Go (programming language)}}
{{Infobox programming language
| name = Go!
| logo =
| caption =
| paradigm =
Multi-paradigm: concurrent, logic, functional, imperative (object-based)
| year = {{Start date and age|2003}}
| designer = Francis McCabe, Keith Clark
| developer =
| latest_release_version =
| latest_release_date =
| latest_test_version = 9-30-07
| latest_test_date = {{Start date and age|2007|9|30}}
| typing = strong
| implementations =
| dialects =
| influenced_by = Prolog
| license = GPLv2
| website =
| operating_system = Unix-like
}}
Go! is an agent-based programming language in the tradition of logic-based programming languages like Prolog.{{cite magazine |last=Claburn |first=Thomas |url=http://www.informationweek.com/news/software/web_services/showArticle.jhtml?articleID=221601351 |title=Google 'Go' Name Brings Accusations Of 'Evil' |magazine=InformationWeek |date=2009-11-11 |access-date=2009-11-14 |archive-date=2010-07-22 |archive-url=https://web.archive.org/web/20100722010320/http://www.informationweek.com/news/software/web_services/showArticle.jhtml?articleID=221601351 |url-status=dead }} 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."{{cite book |last1=Clark |first1=K.L. |last2=McCabe |first2=F.G. |title=Proceedings of the second international joint conference on Autonomous agents and multiagent systems |chapter=Go! For multi-threaded deliberative agents |year=2003 |pages=964–965 | doi=10.1145/860575.860747 |isbn=978-1581136838 |citeseerx=10.1.1.117.184 |s2cid=2047545 }}
The authors also propose that the language is suitable for representing ontologies due to its integration of logic, functional and imperative styles of programming.{{cite journal |last1=Clark |first1=K.L. |last2=McCabe |first2=F.G. |year=2006 |title=Ontology oriented programming in go! |journal=Applied Intelligence |volume=24 |issue=3 |pages=189–204 |doi=10.1145/860575.860747 |citeseerx=10.1.1.117.184 |s2cid=2047545 }}
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
<~
rule defines an interface type - it indicates what properties are characteristic of aperson
and also gives type constraints on these properties. It documents thatage
is a functional property with an integer value, thatlives
is a unary relation over strings, and thatdayOfBirth
is a functional property with a value that is an object of typeday
. - The
$=
type rule indicates that there is also a theory label, with the functorperson
, for a theory that defines the characteristic properties of theperson
type - implements theperson
interface - 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".{{cite web|url=http://code.google.com/p/go/issues/detail?id=9 |title=Issue 9 - go - I have already used the name for *MY* programming language |date=2009-11-10 |access-date=2009-11-14}} The issue received attention among technology news websites, with some of them characterizing Go! as "obscure".{{cite news |url=http://www.geek.com/articles/news/google-didnt-google-go-before-naming-their-programming-language-20091113/ |title=Google didn't google "Go" before naming their programming language |last=Brownlee |first=John |date=2009-11-13 |publisher=Geek.com |access-date=2010-01-18 |archive-date=2012-05-06 |archive-url=https://web.archive.org/web/20120506104459/http://www.geek.com/articles/news/google-didnt-google-go-before-naming-their-programming-language-20091113 |url-status=dead }} 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."{{Cite web|url=https://github.com/golang/go/issues/9#issuecomment-66047478|title=I have already used the name for *MY* programming language · Issue #9 · golang/go|website=GitHub|language=en|access-date=2019-07-04}}
References
{{Reflist|30em}}
Further reading
{{Refbegin}}
- {{cite web |last1=Clark |first1=K. L. |last2=McCabe |first2=F. G. |year=2003 |title=Ontology Oriented Programming in Go! |url=http://www.doc.ic.ac.uk/~klc/DistKR.pdf}}
- {{cite journal |last1=Clark |first1=K. L. |last2=McCabe |first2=F. G. |year=2004 |title=Go!—A Multi-Paradigm Programming Language for Implementing Multi-Threaded Agents |journal=Annals of Mathematics and Artificial Intelligence |volume=41 |issue=2–4 |pages=171–206 |url=http://portal.acm.org/citation.cfm?id=998367 |doi=10.1023/B:AMAI.0000031195.87297.d9 |citeseerx=10.1.1.133.1069 |s2cid=6992205 }}
- {{cite journal |author=R. Bordini |year=2006 |title=A Survey of Programming Languages and Platforms for Multi-Agent Systems |journal=Informatica |volume=30 |pages=33–44 |url=http://www.informatica.si/vol30.htm |display-authors=etal |url-status=dead |archive-url=https://web.archive.org/web/20091115151833/http://www.informatica.si/vol30.htm |archive-date=2009-11-15}}
- {{cite journal |author=M. Fisher |year=2007 |title=Computational Logics and Agents - A Roadmap of Current Technologies and Future Trends |journal=Computational Intelligence |volume=23 |issue=1 |pages=61–91 |url=http://www3.interscience.wiley.com/journal/118495224/issue |archive-url=https://archive.today/20130106033209/http://www3.interscience.wiley.com/journal/118495224/issue |url-status=dead |archive-date=2013-01-06 |doi=10.1111/j.1467-8640.2007.00295.x |display-authors=etal |citeseerx=10.1.1.114.6149 |s2cid=3393868}}
- {{cite book|last=McCabe|first=Francis G.|title=Lets Go!|url=https://books.google.com/books?isbn=0975444913|date=February 7, 2007|publisher=Network Agent Press|isbn=978-0-9754449-1-7}}
- {{cite conference |author=C. Varela |year=2004 |title=On Modelling Agent Systems with Erlang |conference=ACM SIGPLAN Erlang Workshop '04 |url=http://ftp.sunet.se/pub/lang/erlang/workshop/2004/ |display-authors=etal |access-date=2009-11-12 |archive-date=2009-11-15 |archive-url=https://web.archive.org/web/20091115113314/http://ftp.sunet.se/pub/lang/erlang/workshop/2004/ |url-status=dead}}
{{Refend}}
External links
- [https://github.com/frankmccabe/go Github page]
- [http://99-bottles-of-beer.net/language-go!-289.html Code sample on 99-bottles-of-beer.net]
Category:Concurrent programming languages