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.
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;
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.
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.
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).
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;