Gå!

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 11 december 2021; kontroller kräver 5 redigeringar .
Gå!
Språkklass flertrådig
Framträdde i 2003
Författare Frances McCabe , Keith Clark
Blivit påverkad prolog [1]
Licens GPLv2
Plattform Unix-liknande operativsystem

Gå!  är ett flertrådigt programmeringsspråk utvecklat av Keith Clark och Francis McCabe 2003. Multi-paradigm , fokuserat på säker programmering och distribuerade applikationer (med hjälp av agentarkitektur), med stark typning . Det finns stöd för definitioner av funktioner och procedurer, samt relationer mellan dem. Trådar exekverar procedurer, anropar funktioner och begär nödvändiga anslutningar efter behov. Trådar av olika agenter interagerar med varandra med hjälp av asynkrona meddelanden. Trådar av samma agent kan upprätta dynamiska länkar med varandra och bilda ett slags delat minne.

På grund av dess multiparadigmkaraktär har språket stöd för logisk och funktionell programmering, det finns stöd för objektorienterade och imperativa programmeringsstilar och ontologisk modellering stöds fullt ut , liknande typsystemet som används för Semantic Web , p.g.a. vilka OWL- klasser som kan representeras som typsystem[ förtydliga ] [2] .

På grund av lanseringen av Googles eget programmeringsspråk, Go , Go! blev ett offer för en namnkonflikt, och denna konflikt har inte lösts hittills [1] .

Exempel

Följande exempel illustrerar den 'ontologiska' typ och deklarationsstil som används i Go!.

Kön ::= man | kvinnlig . person < ˜ { dayOfBirth : []=> dag . ålder : []=> heltal . kön : []=> Kön . namn : []=> sträng . hem : []=> sträng . liv : [ sträng ]{}}. person : [ sträng , dag , Kön , sträng ] $ = person . person ( Nm , Born , Sx , Hm )..{ dayOfBirth ()=> Born . ålder () => årMellan ( nu (), Född ). kön ()=> Sx . namn ()=> Nm . hem ()=> hm . bor ( Pl ) :- Pl = hem (). yearsBetween : [ heltal , dag ]=> heltal . yearsBetween (...) => .. }. nyPerson : [ sträng , dag , kön , sträng ]=> person . nyPerson ( Nm , Born , Sx , Hm )=> $person ( Nm , Born , Sx , Hm ).

::=-regeln definierar en ny algebraisk typ  , en datatyp som endast består av datakonstruktörer .

Regeln <˜ definierar typen av gränssnitt — den säger exakt vilka egenskaper som kännetecknar en person i det här fallet och lägger också typiska begränsningar (restriktioner) på dessa egenskaper. Detta fixar att ålder (ålder) är en funktionsegenskap med heltalsvärden, och parametern 'lives with' (livs) är en unär relation för strängar, och parametern 'Birthday' (dayOfBirth) är en funktionsegenskap som indikerar dagen för objekt.

En regel som $= säger att det också finns ett märke som en teori (antagande) som indikerar en specifik person; teorin själv definierar egenskaperna hos en persontyp (det vill säga en slags implementering av persongränssnittet), uttryckt i givna fyra parametrar med typer: sträng, dag, Kön och sträng.

Anteckningar

  1. 1 2 Google "Go"-namnet ger anklagelser om "ondska" - InformationWeek . Hämtad 11 november 2009. Arkiverad från originalet 22 juli 2010.
  2. Clark och McCabe, Applied Intelligence, 2006

Länkar

Tvisten löst. Google behåller namnet Go.