Content deleted Content added
HelloAnnyong (talk | contribs) issues still exist - DO NOT REMOVE TAGS UNTIL ISSUES HAVE BEEN SETTLED |
remove random crap |
||
(239 intermediate revisions by more than 100 users not shown) | |||
Line 1:
{{Short description|Multi-paradigm programming language}}
▲{{for|the language created by Google Inc.|Go (programming language)}}
{{Infobox programming language
| name = Go!
| logo =
| caption =
| paradigm =
[[multi-paradigm programming language|Multi-paradigm]]: [[concurrent programming language|concurrent]], [[logic programming|logic]], [[functional programming|functional]], [[imperative programming|imperative]] ([[object-based language|object-based]])
|
| designer = [[Francis McCabe]], [[Keith Clark (computer scientist)|Keith Clark]]
| developer =
| latest_release_version =
| latest_release_date =
| latest_test_version = 9-30-07
| latest_test_date = {{
| typing = [[strong typing|strong]]
| implementations =
| dialects =
|
| operating_system = ▼
| license = [[GPLv2]]
| website =
▲| operating_system = [[Unix-like]]
}}
'''Go!''' is an [[Agent-based model|agent-based]] programming language in the tradition of [[Logic programming|logic-based programming]] languages like [[Prolog]].<ref name="infowk">{{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 }}</ref> It was introduced in a 2003 paper by Francis McCabe and [[Keith Clark (computer scientist)|Keith Clark]].<ref name="aamas"/>
'''Go!''' is a [[concurrent programming language]], first publicly documented by Keith Clark and Francis McCabe in 2003 <ref>Clark and McCabe, AAMAS'03, 2003</ref>. 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.▼
== Design ==
▲
The authors also propose that the language is suitable for representing [[Ontology (information science)|ontologies]] due to its integration of [[logic programming|logic]], [[functional programming|functional]] and [[imperative programming|imperative]] styles of programming.<ref name="applied">{{cite journal | doi=10.1007/s10489-006-8511-x | title=Ontology oriented programming in go! | date=2006 | last1=Clark | first1=K. L. | last2=McCabe | first2=F. G. | journal=Applied Intelligence | volume=24 | issue=3 | pages=189–204 }}</ref>
== Example ==
The following example illustrates the
<syntaxhighlight lang="prolog">
▲The following example illustrates the 'ontology-oriented' type and declarations style of Go!.
age:[] => integer.
sex:[] => Sex.
home:[] => string.
▲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).▼
▲person(Nm, Born, Sx, Hm)..{
The ::= rule defines a new algebraic type - a data type with only data constructors. ▼
▲ dayOfBirth() => Born.
▲ age() => yearsBetween(now(), Born).
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.▼
▲ name() => Nm.
▲ home() => Hm.
▲ lives(Pl) :- Pl = home().
▲ yearsBetween:[integer, day] => integer.
▲ yearsBetween(...) => ..
▲}.
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. ▼
▲newPerson(Nm, Born, Sx, Hm) => $person(Nm, Born, Sx, Hm).
</syntaxhighlight>
▲*The <code>::=</code> rule defines a new [[algebraic
▲*The <
▲*The <code>$=</code> type rule
==Conflict with Google==
In November 2009, [[Google]] released a similarly named [[Go (programming language)|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".<ref name="infowk"/><ref>{{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}}</ref> The issue received attention among technology news websites, with some of them characterizing Go! as "obscure".<ref>{{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 }}</ref> 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."<ref>{{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}}</ref>
== References ==
{{
==Further reading==
{{Refbegin}}
* {{cite
* {{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=
* {{cite journal |
* {{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 ==
* [
* [http://99-bottles-of-beer.net/language-go!-289.html Code sample on 99-bottles-of-beer.net]
[[Category:
[[Category:
[[Category:Programming languages created in 2003]]
|