Go! is an
agent-based programming language in the tradition of
logic-based programming languages like
Prolog
Prolog is a logic programming language that has its origins in artificial intelligence, automated theorem proving, and computational linguistics.
Prolog has its roots in first-order logic, a formal logic. Unlike many other programming language ...
.
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
Programming languages can be grouped by the number and types of Programming paradigm, paradigms supported.
Paradigm summaries
A concise reference for the programming paradigms listed in this article.
* Concurrent programming language, Concurrent ...
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
In information science, an ontology encompasses a representation, formal naming, and definitions of the categories, properties, and relations between the concepts, data, or entities that pertain to one, many, or all domains of discourse. More ...
due to its integration of
logic
Logic is the study of correct reasoning. It includes both formal and informal logic. Formal logic is the study of deductively valid inferences or logical truths. It examines how conclusions follow from premises based on the structure o ...
,
functional and
imperative styles of programming.
Example
The following example illustrates the "ontology-oriented" type and declarations style of Go!:
Sex ::= male , female.
person <~ .
person: tring, day, Sex, string$= person.
person(Nm, Born, Sx, Hm)...
newPerson: tring, day, Sex, string=> person.
newPerson(Nm, Born, Sx, Hm) => $person(Nm, Born, Sx, Hm).
*The
::=
rule defines a new
algebraic data type
In computer programming, especially functional programming and type theory, an algebraic data type (ADT) is a kind of composite data type, i.e., a data type formed by combining other types.
Two common classes of algebraic types are product ty ...
, a
data type
In computer science and computer programming, a data type (or simply type) is a collection or grouping of data values, usually specified by a set of possible values, a set of allowed operations on these values, and/or a representation of these ...
with only data constructors.
*The
<~
rule defines an interface type - it indicates 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
.
*The
$=
type rule indicates 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
,
Sex
, and
string
.
Conflict with Google
In November 2009,
Google
Google LLC (, ) is an American multinational corporation and technology company focusing on online advertising, search engine technology, cloud computing, computer software, quantum computing, e-commerce, consumer electronics, and artificial ...
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
Further reading
*
*
*
*
*
*
{{Refend
External links
Github page
Concurrent programming languages
Free and open source compilers
Programming languages created in 2003