Content deleted Content added
Rescuing 1 sources and tagging 0 as dead. #IABot (v1.2.7.1) |
remove random crap |
||
(41 intermediate revisions by 26 users not shown) | |||
Line 1:
{{Short description|Multi-paradigm programming language}}
{{for|the language released in 2009 by Google|Go (programming language)}}
{{Infobox programming language
Line 7 ⟶ 8:
[[multi-paradigm programming language|Multi-paradigm]]: [[concurrent programming language|concurrent]], [[logic programming|logic]], [[functional programming|functional]], [[imperative programming|imperative]] ([[object-based language|object-based]])
| year = {{Start date and age|2003}}
| 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 = {{Start date and age
| typing = [[strong typing|strong]]
| implementations =
Line 22 ⟶ 23:
}}
'''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
== Design ==
The authors of Go! describe it as "a [[multi-paradigm programming language]] that is oriented to the needs of programming secure, production quality
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. |
== Example ==
The following example illustrates the "ontology-oriented" type and declarations style of Go!:<ref name=applied />
<syntaxhighlight lang="prolog">
▲ Gender [[#algebraic|'''::=''']] male | female.
▲ person [[#interface|'''<˜''']] {dayOfBirth:[] '''=>''' ''day''.
▲ age:[] '''=>''' ''integer''.
▲ gender:[] '''=>''' Gender.
▲ name:[] '''=>''' ''string''.
▲ home:[] '''=>''' ''string''.
▲ lives:[''string'']{}}.
▲ person:[''string'', ''day'', Gender, ''string''] [[#theory|'''$=''']] person.
person(Nm, Born, Sx, Hm)..{▼
dayOfBirth() '''=>''' Born.▼
age() '''=>''' yearsBetween(now(), Born).▼
gender() '''=>''' Sx.▼
name() '''=>''' Nm.▼
home() '''=>''' Hm.▼
lives(Pl) [[Prolog#Rules and facts|''':-''']] Pl '''=''' home().▼
yearsBetween:[''integer'', ''day''] '''=>''' integer.▼
yearsBetween(...) '''=>''' ..▼
}.▼
newPerson:[''string'', ''day'', Gender, ''string''] '''=>''' person.▼
newPerson(Nm, Born, Sx, Hm) '''=>''' $person(Nm, Born, Sx, Hm).▼
{{anchor|algebraic}}The <code>::=</code> rule defines a new [[algebraic data type]], a [[data type]] with only data constructors.▼
{{anchor|interface}}The <code><˜</code> rule defines an interface type - it indicates what properties are characteristic of a <code>person</code> and also gives type constraints on these properties. It documents that <code>age</code> is a functional property with an integer value, that <code>lives</code> is a unary relation over strings, and that <code>dayOfBirth</code> is a functional property with a value that is an object of type <code>day</code>.▼
{{anchor|theory}}The <code>$=</code> type rule indicates that there is also a theory label, with the functor <code>person</code>, for a theory that defines the characteristic properties of the <code>person</code> type - implements the <code>person</code> interface - in terms of four given parameters of types string, <code>day</code>, <code>Gender</code>, and <code>string</code>.▼
</syntaxhighlight>
▲
▲
▲
==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
== References ==
Line 75 ⟶ 72:
==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=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 |
* {{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 |
{{Refend}}
== External links ==
* [
* [http://99-bottles-of-beer.net/language-go!-289.html Code sample on 99-bottles-of-beer.net]
[[Category:Programming languages created in 2003]]▼
[[Category:Concurrent programming languages]]
[[Category:Free
▲[[Category:Programming languages created in 2003]]
|