A biztonságosság olyan nyelvben, mint a Hermes rendkívüli fontosságú. Hosszú élettartamú program rendszerek, melyek olyan modulokból épülnek fel amiket több felhasználó készített, amelyek dinamikusan betölthetnek tetszőleges, korábban még nem tesztelt programokat képesek kell, hogy legyenek a jó programok futtatására még akkor is ha néhány hibás program is elindul.
Ennek egyik eszköze a más nyelvekből már ismert kivételkezelés. A gyakorlatban kivételek definiálatlan változók elérése közben vagy nem megfelelő típusú adatok elérésekor váltódnak ki. Ez utóbbi kikerülhető megfelelő típus ellenőrzéssel. Fennmaradó biztonsági problémák az átnevezés és a megosztás amelyek egyike sem létezik Hermesben így ezekkel nem kell törödni.
Hermesben minden változó rendelkezik típussal ami a hatáskörén belül rögzített és amely közvetlenül a deklarációból kerül megállapításra. Minden művelet osztály szabályokkal bír amelyek korlátozzák az operandusok típus osztályait. például a + integer és real típusokkal használható. Minden műveletnek van típus következtetési szabálya ami meghatározza egy operandus típusát egy másik típus függvényében, például, ha S Charstring amelyet ordered table of Char -ként definiáltunk akkor insert C into S esetén C-nek Char típusúnak kell lennie. A változók deklarált típusa és a kifejezések következtetett típusának meg kell kell határozniuk egy egyéni típust minden kifejezés számára és konzisztensnek kell lennie a típus szabályokkal.
Hermesben a definiálatlan értékek problémájának megoldására a típusállapot ellenőrzés szolgál,- az adatfolyam analízis általánosítása. Hermes compilerek típusállapot ellenőrzéssel követik nyomon azt, hogy
A Hermes compiler visszautasít egy olyan programot amit egy Pascal vagy Ada compiler sikeresen lefordít, de hibás lefutást produkál.
A típusállapot a változó tulajdonságait
leíró attribútumok halmaza, olyanoké mint inicializált/inicializálatlan
,stb.
Ha A inicializált akkor init(A) attribútum jelen van
a típusállapotában, különben nincs.
Típusállapot analízis során minden programponthoz egy típusállapot kerül meghatározásra. Ez azt jelenti, hogy egy adott ponton A változóról ismernünk kell annak inicializált/inicializálatlan voltát.
Egy if kifejezés végpontjában a két útvonal összeolvad, halmaza a típusállapotok metszete.
Egy típusállapot alacsonyabb egy másiknál, ha az, az attribútumainak szigorú részhalamaza.
Olyan hívásoknál amelyekben inicializálatlan változó műveletét kívánjuk meghívni, az nem lehetséges így a típusállapot túl alacsony. Olyan kényszerítő művelet amely ezt magasabbra emelné nincs. A hívás így visszautasításra kerül, a compiler pedig hibaüzenetet ad, miszerint a kívánt attribútum igényelt azonban nincs jelen.
összefoglalva:
A típusállapot ellenőrzéstől
egyrészt a biztonságosságot kapjuk, másrészt
a kiszámíthatatlan cselekvések korai felismerését,
harmadrészt hatékonyságot amely a közös címterek
biztonságos kezeléséből fakad. Eredménye
továbbá az ingyenes szemétgyűjtés.