A Habanero Java programozási nyelv

Kivételkezelés

A Habanero Java alapvetően a Javában lévő kivételkezlő mechanizmusokat használja. Ugyanazok a szabályok vonatkoznak a kivételek definiálására, kiváltására, kezelésére, és szekvenciális vagy Javabeli Threadekkel megvalósított párhuzamosság esetén a terjedésére is.

Kivételek terjedése párhuzamos szerkezetekben

Ahogy fentebb olvasható, a kivételek kezelésének szabályai megegyeznek a Javában lévő szabályokkal. Olyannyira, hogy amennyiben egy párhuzamos konstrukcióban lekezeletlen kivétel jelentkezhet, azt a párhuzamos konstrukció helyén fellépőnek tekinti a fordító. Azaz vagy kezelni kell az adott helyen, vagy jelezni a terjedését a metódus szignatúrájában.

Ez valószínűleg mindenki számára elég problémásan hangzik, hiszen a két tevékenységnek alapvetően egymástól függetlenül kellene működnie. Az elindított tevékenység létrehozásától időben messze is lehet egy kivétel megjelenése, és addigra a szülő tevékenység végrehajtása már a kódban teljesen máshol is járhat. De nem kell aggódni, mert a fordító csak annyit követel meg, hogy lokálisan fogjuk el az esetleges kivételt, nem kell azzal foglakozni, hogy a kód teljesen más részén is járhat a vezérlés a kivétel megjelenésekor. Ez azt jelenthetné, hogy a fordító valamilyen módon ezt a kivételkező részt az új tevékenység legkülső részében elhelyezi, ami egész jó megoldás is lehetne, persze akkor a kivételkezelő részben valószínűleg elég szigorú megkötéseket kellene tenni a használható változókra és műveletekre vonatkozóan.

A szomorú igazság azonban az, hogy bár a fordító megköveteli, hogy a párhuzamos szerkezetből kigyűrűző kivételt is hagyományos módon kezeljük, a végrehajtás során már nem tesz vele semmit. Ha egy tevékenységben lekezeletlen kivétel támad, akkor az minden esetben ugyanúgy a program terminálását eredményezi, mintha a fő tevékenységben engedtünk volna szabadjára egy kivételt.