SYNAPSE

A task unitok

A task unitok

Egy Synapse program egy vagy több task unitból állhat. Minden task unit egy külön fordítási egység, ami pontosan egy task típus leírását tartalmazza. A továbbiakban a task unit a task típust, míg a task a task unit egy objektumát jelöli. Egy task unit mûveleteit az ún. handlerek alkotják. Egy task unit felépítését az alábbi ábra szemlélteti:

interfész
header
[prioritás]
[idõszelet]
[export-lista]
[import-lista]

implementáció
deklarációk
belépési pont

Egy task unit két részbõl áll, az interfészbõl és az implementációból. Ezeket külön fájlban kell elhelyezni. Az interfész fájl nevének kiterjesztése kötelezõen ".int", míg az implementációs fájlé kötelezõen ".syn".

Az interfészben található a fejléc, ami a task unit azonosítónevébõl és annak a fájlnak a nevébõl áll, ahol az implementáció van. Ezt követi opcionálisan a task unit prioritása, idõszelete, valamint az export- és az import- lista. Arról a cikk nem tesz említést, hogy mi történik akkor, ha nem adunk meg explicit módon prioritást, ill. idõszeletet. Az export-listában csak handler azonosítónevek szerepelhetnek. Ha egy T1 task unit egy másik T2 task unittól importál, akkor a T1-et a T2 kliensének nevezzük. Az interfész a kliens task unit által látható (public) részt tartalmazza.

Az implementációs rész, ami minden más task unit számára láthatatlan, két részbõl áll. A deklarációs részben konstansokat, változókat, eszközöket (device) és handlereket deklarálhatunk. Ha egy handler neve nem szerepel az export- listában, akkor az lokális a task unitra nézve. A handlereket úgy tekinthetjük, mint az adott task típus felhasználó által definiált mûveleteit. A deklarációs részt a task unit belépési pontjának (entry point) kell követnie, ami a task unit törzsének kezdetét jelöli ki. A task végrehajtása ettõl a ponttól kezdõdik.

A következõ példa egy olyan task unit, aminek nincs explicit megadva a prioritása és az idõszelete, továbbá egyetlen lokális handlere van. A # karakter megjegyzés kezdetét jelöli, ami a sor végéig tart.

# mytask.inc
# A task named MyTask physically stored in the file "mytask.syn"
task MyTask in "mytask.syn"


# mytask.syn
var aGlobalVariable:byte # visible in handlers and task entry

handler Read(aParameter:byte)
var i:byte # visible in handler Read only

# a statement in a handler
i := aGlobalVariable + aParameter
# task entry
entry
var i:byte # visible in task entry only

# Statement in task entry
aGlobalVariable := 0
i := 10
# countdown 9 8 ... 0 go!
loop
# the 3 following statements are the loop's body
i := i - 1
put i
exit when i = 0
put "go!"