Hermes programozási nyelv

Folyamatok

Folyamatok létrehozása kommunikációja és műveletei

konstrukciója:
 
::= callmessage (
 [ komponens-deklaráció [, komponens deklaráció] ...]
 )
 [konstans-paraméterek]
 exit exit-típusállapot
 [minimum]
 [felhasználói kivételek] ...


::= inport of callmessage-típus entry-típusállapot
::=outport of inport-típus

konstans-paraméterek
::= constant ([ komponens-név [, komponens-név] ... ] )

minimum
::= minimum minimum-típusállapot

felhasználói kivételek
::= exception felhasználói-kivétel-név kivétel-típusállapota

Az input port, output port és callmessage típus családok a "nagyban programozás"-t hívatottak elősegíteni a rendszer processzekre bontásával, a processzek létrehozásával, köztük lévő kötések létrehozásával illetve a folyamatok közti kommunikációval.

Az input port vagy inport egy üzenet sor amelyre csatlakozás létesíthető. Hangsúlyos, hogy Hermesben az inportok értékek amely értékek inport változókban kerülnek eltárolásra, úgy mint az egészek vagy string értékek is egész vagy string változókban tárolandók.

Egy inport típus definíció meghatározza a típus nevét amelyet üzenet típusnak nevezünk és egy formális típusállapotot amit belépési típusállapotnak hívunk. általában az üzenet típusa a callmessage típusa, bár ez lehetne más is, hiszen a send segítségével átadható bármilyen érték az inportnak.
A belépési típusállapot megegyezik az üzenet akkori típus értékeinek típusállapotával amikor elküldésre kerül.

Két inport összehasonlítva akkor és csak akkor egyenlő ha azok ugyanazon inportok, vagy ugyanazon inportok konstans másolatai.

Az output port vagy outport csatlakozás egy input port ra. Haosnlóan az input porthoz ez is változó amelynek kezelése megegyezik az összes többi változó kezelésével. Változóban tárolható és üzenet formájában továbbítható. A programok azon képessége, hogy output portokat küldjenek és fogadjanak felruházza Hermest a képesség-alapú rendszerek erejével.

Két outport egyenlő, ha ugyanazon input portra csatlakoznak.

Minden new művelettel létrehozott input port különböző input port . Csakis konstans másolással hozhatunk létre azonosat.

Output port definíciója meghatározza az illeszthető input port típusát. Az adatok típus és típusállapota az output porton az illeszkedő input port üzenet típus és típusállapota által kerülnek meghatározásra.

Egy callmessage típus definíciója a következőkből áll:

  1. új callmessage változó létrehozása
  2. az argumentumok a callmessage-be mozgatása
  3. a callmessage elküldése az input porthoz
  4. várakozás a callmessage visszetérésére
  5. a callmessage komponenseinek visszatöltése az argumentum változókba
  6. a callmessage eldobása

    Abban az esetben, ha az input port már korábban eldobásra került és az output port csatlakozás nélkül maradt Disconnected kivétel váltódik ki.

A receive utasítás segíségével az input port sorából üzenetet vehetünk ki, amennyiben az lehetséges, majd ezt egy célváltozóban tárolhatjuk. Az input port szükségszerűen inicializált. Annak meghatározása, hogy melyik üzenetet vegyük ki nemdeterminisztikusan történik.

Ha az inportnak nincs csatlakozása, akkor a Disconnected kivétel lép fel.

Ha van csatlakozása, de nincs ide küldött üzenet a fogadó utasítás végtelen ideig blokkolásra kerül.

::= receive callmessage-változó from inport-változó

A return utasítás által a callmessage visszatér a hívóhoz és a hívó végrehajtása újrakeződik.Opcionálisan egy kivétél is okozhat visszatérést a hívóhoz.

Visszatérés után a callmessage inicializálatlanná válik.

A folyamat végrehajtása folytatódik return végrehajtása után. Azaz nem terminál automatikusan ekkor. ámbár ez is megvalósíható az utasításnak a processz végére írásával vagy egy ezt követő ugrással a folyamat végére.

::=return callmessage-változó [exception felhasználói-kivétel-név]

A send egy változó értékét átmozgatja és sorba teszi egy input portra vonatkozóan. Operandusai a forrás változó és egy outport.Az említett változónak megfelelő típusúnak kell lennie és a típusállapota vagy egyezzen a belépési típusállapottal vagy magasabb legyen annál. Magasabb állapotra alkalmazhatóak megszorító műveletek és így elérhető a kívánt állapot. Az outportnak inicializáltnak kell lennie.

::= send forrás-kifejezés to outport-kifejezés

A create új processzt hoz létre. Operandusa a predefined!program típusú változó. Az eredmény egy outport.

A program típusállapotának ellenőrzöttnek kell lennie. A program processzek halmaza amelyek közül egy a fő program. A főprogram egy source module által előállt process_module konverziójának eredménye

Az inicializációs port az a változó amely a process kulcsszót követi. Ennek input port típusúnak kell lennie. Create végrehajtásakor a portok illeszthetőségének ellenőrzése történik (ez az input port típus egyezik-e a create által eredményezettel, ha nem InterfaceMismatch váltódik ki).
Ha a kivétel nem lép fel az új processz létrejön Ez a processz hajtja végre a program változóban lévő főprogram által definiált programot, ami a begin kulcsszónál indul.

::= create of változó.

A procedure művelet processz generátor művelet. Ellenőrzött programot kap paraméterként és output portot eredményez. Az InterfaceMismatch itt is felléphet akárcsak a create-nél.

Hatása hasonló a create-hez, de vele mégsem azonos. Az eltérés a következő:

Ami létrejön az nem a kijelölt programot futtató processz, hanem egy generátor processz.

Minden generátor folyamat hívásakor létrehozza a kijelölt programot futtató folyamat egy példányát. Ami azt követően elküldi a callmessage-t amit kapott az új folyamat inicializációs portjára.

::= procedure of változó