Hermes is a language for distributed programming that was developed at IBM's Thomas J. Watson Research Center from 1986 through 1992, with an open-source compiler and run-time system. Hermes' primary features included:
- Language support of processes and interprocess communication.
- Compile-time verification that operations use initialized data.
- Representation-independent data aggregates called tables.
- Lack of pointers.
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. Typestate was actually used more extensively, to generate compiler-inserted "delete" operations.
References
Strom, Robert E.; Bacon, David F; Goldberg, Arthur P.; Lowry, Andy; Yellin, Daniel M.; Yemini, Shaula (1991). Hermes - A Language for Distributed Computing. Englewood Cliffs, NJ, USA: Prentice-Hall. ISBN 978-0-13-389537-7. 978-0-13-389537-7 ↩
Lowry, Andy (1992). "The Hermes language in outline form". ACM SIGPLAN Notices. 27 (8): 51–70. doi:10.1145/142137.142148. ISSN 0362-1340. S2CID 28615424. https://doi.org/10.1145%2F142137.142148 ↩
Strom, R.E. (1990). "Hermes: an integrated language and system for distributed programming". IEEE Workshop on Experimental Distributed Systems. pp. 75–82. doi:10.1109/EDS.1990.138054. S2CID 10223422. /wiki/Doi_(identifier) ↩
Bacon, David F.; Lowry, Andy (1990). A Portable Run-time System for the Hermes Distributed Programming Language. USENIX Summer Technical Conference. Anaheim, California, USA: Usenix Association. pp. 39–50. /wiki/David_F._Bacon ↩
Korfhage, Willard; Goldberg, Arthur P. (1995). "Hermes language experiences" (PDF). Software: Practice and Experience. 25 (4): 389–402. CiteSeerX 10.1.1.13.9034. doi:10.1002/spe.4380250404. ISSN 0038-0644. S2CID 30437763. Archived from the original (PDF) on 2005-05-26. Retrieved 2009-08-27. https://web.archive.org/web/20050526190214/http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol25/issue4/spe950wk.pdf ↩
Strom, Robert E. (1983). "Mechanisms for compile-time enforcement of security". Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '83. pp. 276–284. doi:10.1145/567067.567093. ISBN 978-0897910903. S2CID 6630704. 978-0897910903 ↩