Hermes
é uma linguagem para programação distribuída
que foi desenvolvida no Thomas J. Watson Research Center da IBM de 1986 a 1992,
com um compilador e sistema de execução de código aberto.
Os principais recursos do Hermes incluíam:
Suporte à linguagem para processos e comunicação entre processos.
Verificação em tempo de compilação de que as operações usam dados inicializados.
Agregados de dados independentes de representação chamados tabelas.
Ausência de ponteiros.
Ele usava análise de typestate para verificar erros de transições de variáveis, para descartar algumas transições semanticamente não significativas de um estado para outro (ou seja, a partir de um valor, algumas sequências de operações em uma variável são sem sentido), do qual a leitura de uma variável não inicializada é um caso especial. Nesse papel de verificação em tempo de compilação da inicialização de dados é semelhante à análise de atribuição definitiva realizada por Java, Cyclone e C#.