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] .
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.