Вот какой-то странный вопрос. Я в процессе написания книги по обучению программированию с использованием формальных методов, и я собираюсь настроить ее на людей с некоторым опытом программирования. Идея состоит в том, чтобы научить их быть качественными программистами.
Базовая нотация будет от Dijkstra "Дисциплина программирования" вместе с некоторыми concurrency и расширениями связи.
В отличие от EWD, я хочу, чтобы мои ученики в конечном итоге написали реальные исполняемые программы. Это означает, что в какой-то момент переводится с обозначения EWD на какой-то другой язык. Когда я впервые начал выполнять формальное программирование, я нацелился на C, но вы в конечном итоге написали много сантехники, плюс есть все сложности в обработке указателей и т.д. Ruby - очевидная возможная цель, как и схема или Lisp. Но существуют также различные языки функций; так как меня особенно интересует concurrency, Erlang кажется возможной.
Итак, наконец, вот мой вопрос: на каком языке (языках) я должен учить своих читателей ориентироваться на их формально разработанные программы?