Ученый, который сделал больше всего для продвижения этой точки зрения, - Тони Хоар. Тони вместе со своим коллегой Эдсгером Дейкстрой отстаивали недетерминированные языки программирования, чтобы был более плавный путь от спецификации к реализации. Тони определенно хотел один язык как для спецификации, так и для реализации. Подробнее об этом представлении читайте в его книге по Alegbra of Programming . Тони также сделал основную работу по доказательству правильности абстракций. Вся эта работа была проделана в контексте простых императивных языков со структурированным потоком управления и классическими процедурами с побочными эффектами. Так что нет никакой связи с декларативным программированием необходимости. Исторически сложилось так, что работа над функциональным программированием (основной ветвью декларативного программирования) стала продолжением лекции Тьюринга Бэкуса об «освобождении программирования от узкого места фон Неймана»; Функциональное программирование было связано с производительностью программирования так же, как и с чем угодно.
То, что мы обнаружили со времен Хоара, заключается в том, что формальные спецификации и формальные модели * очень дорогие . Расходы не были оправданы, за исключением особых обстоятельств, таких как «если программное обеспечение не работает, пациент умрет» или «если программное обеспечение не будет работать, самолет упадет». Неформальные модели и спецификации довольно полезны, и их гораздо дешевле производить и работать. По-прежнему проводятся интересные исследования в области моделирования, проверки моделей и так далее. Один из моих любимых - это язык Alloy, созданный группой Дэниела Джексона в MIT. В Microsoft Research также есть отличная работа и много других хороших вещей. Также есть некоторая работа в декларативном программировании, но она также имеет «дешевое и веселое» разнообразие, а не всеобъемлющий, программный подход, как у Хоара. Один из моих любимых - это QuickCheck от Claessen и Hughes, который предоставляет возможность устанавливать формальные свойства и исследовать их путем случайного тестирования. Никаких доказательств или теорем, но все же очень полезно.
Таким образом, вы описываете план выполнения формальных моделей, спецификаций и программ в одной структуре. По-прежнему много работы проделывается по частям, но единая повестка дня была заброшена.