Go! (programming language): Difference between revisions

Content deleted Content added
reverted to Nov 15th version, to undo wholesale rewrite by deletion advocate. This need to go through talk.
m rv - please don't revert to very old versions of the article, unless there's something blatantly wrong with the edits (which doesn't seem to be the case)
Line 23:
}}
 
'''Go!''' is an obscure<ref>http://www.geek.com/articles/news/google-didnt-google-go-before-naming-their-programming-language-20091113/</ref> [[Agent-based model|agent-based]] programming language in the tradition of [[Logic programming|logic-based programming]] languages like [[Prolog]].<ref>{{cite web|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' |publisher=InformationWeek |date=2009-11-11 |accessdate=2009-11-14}}</ref> It was introduced in a 2003 paper by Francis McCabe and [[Keith Clark]].<ref>Clark and McCabe, AAMAS'03, 2003</ref>
'''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> and included as part of the Network Agents project at [[Sourceforge]]<ref>{{cite web|url=http://sourceforge.net/projects/networkagent/ |title=Network Agents |publisher=Sourceforge.net |date= |accessdate=2009-11-14}}</ref>. It is oriented to the needs of programming secure, production quality, agent based applications. It is [[multithreaded]], [[strong typing|strongly typed]] and [[Functional programming|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.
 
Upon the November 2009 release of Google's programming language [[Go (programming language)|Go]] programming language (note lack of [[exclamation point]]) has,McCabe sinceasked itsGoogle 2009to release, beenchange the subjectname ofand anaccused asthe yetcompany unresolvedof naming"steam-rollering controversyover with Go! due to its very similar nameus".<ref>{{cite web|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' |publisher=InformationWeek |date=2009-11-11 |accessdate=2009-11-14}}</ref><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 |publisher=code.google.com |date=2009-11-10 |accessdate=2009-11-14}}</ref>
Its nature as a multi-paradigm programming language, integrating logic, functional, object-oriented, and imperative programming styles,<ref name=informatica-survey>Bordini et al., Informatica, 2006</ref> is particularly applied to ontology-based modeling, as exploited for the [[Semantic Web]] in allowing a type system where [[Web Ontology Language|OWL]] classes can be represented in the type system.<ref>Clark and McCabe, Applied Intelligence, 2006</ref> The design of Go!, according to Bordini et al.'s survey,<ref name=informatica-survey /> also took into consideration critical issues such as security, transparency, and integrity, in regards to the adoption of logic programming technology. Agents in Go! contain both reactive and deliberative aspects, and coordinate using BDI structures,<ref>Fisher et al., Computational Intelligence, 2007</ref> and their style of expression has influenced the modeling of agent systems in [[Erlang (programming language)|Erlang]].<ref>Varela et al., Erlang Workshop'04</ref>
 
== Design ==
Google's programming language [[Go (programming language)|Go]] (note lack of [[exclamation point]]) has, since its 2009 release, been the subject of an as yet unresolved naming controversy with Go! due to its very similar name.<ref>{{cite web|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' |publisher=InformationWeek |date=2009-11-11 |accessdate=2009-11-14}}</ref><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 |publisher=code.google.com |date=2009-11-10 |accessdate=2009-11-14}}</ref>
 
'''Go!''' "is a [[concurrentmulti-paradigm programming language]], first publicly documented by [[Keith Clark]] and Francis McCabe in 2003<ref>Clark and McCabe, AAMAS'03, 2003</ref> and included as part of the Network Agents project at [[Sourceforge]]<ref>{{cite web|url=http://sourceforge.net/projects/networkagent/ |title=Network Agents |publisher=Sourceforge.net |date= |accessdate=2009-11-14}}</ref>. Itthat is oriented to the needs of programming secure, production quality, agent based applications. It is [[multithreadedmulti-threaded]], [[strong typing|strongly typed]] and [[Functionalhigher programmingorder function|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.
== Communication model ==
communicate and coordinate using asynchronous messages. Threads within the same agent can also use shared dynamic relations acting as
[[Linda (coordination language)|Linda]]-style [[tuple space|tuple stores]]."<ref>Clark and McCabe, AAMAS'03, 2003</ref>
 
The authors also propose that the language is suitable for representing [[ontology|ontologies]] due to its integration of [[logic programming|logic]], [[functional programming|functional]], [[object-oriented programming|object-oriented]] and [[imperative programming|imperative]] styles of programming.<ref>Clark and McCabe, Applied Intelligence, 2006</ref>
Threads within a single Go! process, hence in the same agent, can also communicate by manipulating dynamic relation objects, comparable with [[Linda_(coordination_language)|Linda]] tuple stores,<ref name=informatica-survey /> used to coordinate their activities. A related combination of tuple-based shared stores and Semantics has been taken up as the communication mechanism in the approaches of the [http://www.tripcom.org/ TripCom.org]<ref>[http://www.tripcom.org/docs/del/D6.5v2.pdf TripCom]</ref> and [[SOA4All]]<ref>[http://www.soa4all.eu/file-upload.html?func=startdown&id=77 Soa4al.eu]</ref> projects.
 
== Example ==
Line 59 ⟶ 61:
The <code>::=</code> rule defines a new [[algebraic data type]], a [[data type]] with only data constructors.
 
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>.
 
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 string.
 
== Footnotes ==