Hermes (programming language)

Hermes{{cite book |last1=Strom |first1=Robert E. |last2=Bacon |first2=David F |authorlink2=David F. Bacon |last3=Goldberg |first3=Arthur P. |last4=Lowry |first4=Andy |last5=Yellin |first5=Daniel M. |last6=Yemini |first6=Shaula |title=Hermes - A Language for Distributed Computing |location=Englewood Cliffs, NJ, USA |publisher=Prentice-Hall |year=1991 |isbn=978-0-13-389537-7 }}

{{cite journal|last1=Lowry|first1=Andy|title=The Hermes language in outline form|journal=ACM SIGPLAN Notices|volume=27|issue=8|year=1992|pages=51–70|issn=0362-1340|doi=10.1145/142137.142148|s2cid=28615424|doi-access=free}}

is a language for distributed programming{{cite book|last1=Strom|first1=R.E.|title=IEEE Workshop on Experimental Distributed Systems|chapter=Hermes: an integrated language and system for distributed programming|year=1990|pages=75–82|doi=10.1109/EDS.1990.138054|s2cid=10223422}}

that was developed at IBM's Thomas J. Watson Research Center from 1986 through 1992,

with an open-source compiler and run-time system.{{cite conference |last1=Bacon |first1=David F. |authorlink=David F. Bacon |last2=Lowry |first2=Andy |title=A Portable Run-time System for the Hermes Distributed Programming Language |conference=USENIX Summer Technical Conference |publisher=Usenix Association |place=Anaheim, California, USA |date=1990 |pages=39–50 }}

Hermes' primary features included:{{cite journal|last1=Korfhage|first1=Willard|last2=Goldberg|first2=Arthur P.|title=Hermes language experiences|journal=Software: Practice and Experience|volume=25|issue=4|year=1995|pages=389–402|issn=0038-0644|doi=10.1002/spe.4380250404|url=http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol25/issue4/spe950wk.pdf|citeseerx=10.1.1.13.9034|s2cid=30437763|access-date=2009-08-27|archive-url=https://web.archive.org/web/20050526190214/http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol25/issue4/spe950wk.pdf|archive-date=2005-05-26|url-status=dead}}

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.{{cite book|last1=Strom|first1=Robert E.|title=Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '83|chapter=Mechanisms for compile-time enforcement of security|year=1983|pages=276–284|doi=10.1145/567067.567093|isbn=978-0897910903|s2cid=6630704}}

Typestate was actually used more extensively, to generate compiler-inserted "delete" operations.

References