Hermes (programming language)
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 }}
- 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.{{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
{{Reflist}}
{{Authority control}}
Category:Distributed computing
Category:Programming languages
Category:Static program analysis tools
{{prog-lang-stub}}