Hermes[1] [2] is a language for distributed programming[3] that was developed at IBM's Thomas J. Watson Research Center from 1986 through 1992, with an open-source compiler and run-time system.
[4] Hermes' primary features included:[5] It used typestate analysis to check variables transitions errors, to rule out some semantically non meaningful transitions from one state to another (i.e. starting from a value, some sequences of operations on a variable are nonsensical), of which reading an uninitialized variable is a special case.
In this role of compile-time checking of data initialization is similar to definite assignment analysis performed by Java, Cyclone and C#.
Hermes and its predecessor, NIL (Network Implementation Language), were the earliest programming languages supporting this form of initialization checking.
[6] Typestate was actually used more extensively, to generate compiler-inserted "delete" operations.