A PEARL programozási nyelv

Bevezetés



A PEARL (Process and Experiment Automation Realtime Language) egy nagyrészt platformfüggetlen programozási nyelv, melyet valós idejű, párhuzamos problémák megoldására fejlesztettek ki. A mostani szabványt több lépésben dolgozták ki:

A PEARL 90 pontos definícióját 1989-90-ben dolgozták ki, ez a változat lényegében megfelel a Full PEARL-nek, habár néhány a gyakorlatban nem használt nyelvi elemet elhagytak, és néhány kisebb fejlesztést is tartalmaz. Ez az anyag a PEARL 90-el foglakozik részletesen.

A PEARL általános jellemzői

Párhuzamosság

Párhuzamos folyamatok kezelésére a PEARL-ben taszkokat használhatunk.

Taszkok egymással való együttműködésére, és taszkok kezelésére a PEARL a következő lehetőségeket biztosítja:

supplies: TASK PRIORITY 2;
task object (declarations, statements)
END;

ACTIVATE supplies;

TERMINATE printing

SUSPEND statistics;

CONTINUE statistics;

AFTER 5 SEC RESUME;

Kéréstől függően lehetséges egy taszk ismételt végrehajtása. Végrehajthatunk egy taszkot pl. adott időpontban, megadott időtartam után, vagy tetszőleges üzenethez is köthetjük a végrehajtást.

WHEN ready ACTIVATE supplies;

A példában a ready üzenet (megszakítás) minden érkezésekor a supplies taszk aktiválódik.

Taszkokat lehetséges periodikusan is aktiválni:

AT 12:0:0 ALL 1 SEC UNTIL 12:15:0 ACTIVATE measuring

Taszkok közötti szinkronizációs feladatok végrehajtásának segítésére vezette be a nyelv a SEMA és a BOLT típusokat, megfelelő műveleteikkel pl.:

REQUEST conveyor-belt;
RELEASE communication-buffer;

Lehetséges input és output

Az adatforgalom kezelése a standard perifériák, fájlok, vagy egyéb speciális készülékek esetében is ugyanúgy történik. Mindezekre a nyelv egységesen adatállomásokként hivatkozik.

Az adatátvitelnek lényegében két formáját különbözteti meg a nyelv:

READ record FROM file BY POS (10);
WRITE data-set TO logbook;
TAKE measured-value FROM TemperatureSensor;
SEND on TO motor;

PUT event TO printer BY F(5);
GET receipt FROM terminal;

Az adatállomások nevei szabadon megválaszthatóak. Ezt a PEARL azáltal éri el, hogy a programokat számítógépfüggő, illetve nagyrészt számítógép független részre osztja fel.

Program struktúra

 

Egy PEARL program egy vagy több független programegységből (modulból) állhat.

A modulok között kommunikáció globális objektumok - lehetnek változók, eljárások, vagy taszkok - segítségével lehetséges.

Annak érdekében, hogy minél inkább platformfüggetlen módon programozhassuk az adatátvitel utasításait, ütemezhessük a megszakításokra, vagy szignálokra adott válaszokat a modulokat általában két részre osztjuk fel: egy rendszerfüggő részre, és a probléma megoldását tartalmazó részre.

A rendszerfüggő részben írjuk le milyen hardver konfigurációt használunk.
Itt adhatunk meg (szabadon választott) neveket az eszközöknek és csatlakozásaiknak, a megszakításoknak és szignáloknak.

A következő példában a számítógép által DIGIOUT(1)-el hivatkozott digitális output egység 3. csatlakozójához (DIGOUT (1) * 3) rendelünk egy nevet (valve):

valve: DIGOUT (1) * 3;

Ennek a névnek a bevezetésével a problémát megoldó részben már a számítógép tulajdonságaitól függetlenül hivatkozhatunk erre az egységre:

SEND on TO valve;

Annak érdekében, hogy strukturálni tudjuk az algoritmusainkat blokkok (névvel ellátott), eljárások és taszkok (párhuzamos folyamatok) állnak rendelkezésünkre.

Adattípusok

A következő adattípusok találhatók meg a PEARL-ben:

Ezek felhasználásával összetett adatstruktúrák is készíthetők - tömbök, struktúrák (STRUCT), és listák - a TYPE definíció segítségével. Bármely adatstruktúrához bevezethetők új operátorok (OPERATOR).

Vezérlési szerkezetek

A következő vezérlési szerkezetek elérhetők a nyelvben:

		IF kifejezés THEN utasítás [ ELSE utasítás ] FIN;
		CASE kifejezés
ALT utasítás_1
ALT utasítás_2
...
[OUT utasítás_n]
FIN;

CASE kifejezés
ALT (esetek_1) utasítás_1
ALT (esetek_2) utasítás_2
...
[OUT utasítás_n]
FIN;

WHILE feltétel REPEAT ... END;


FOR ciklusváltozó FROM kezdőérték BY növekmény TO végérték REPEAT ... END;

EXIT blokk;