Сегодня изучал работы Шалыто посвященные автоматному программированию. Эта технология кажется перспективной. Однако на мой вкус представлена из рук вон плохо, я например стал чуть-чуть понимать суть только с третьего подхода. Даже функциональное программирование и теорию категорий, кажется проще освоить.

Идея автоматного программирования заключается в построении управляющего автомата. Для этой цели программа описывается, как набор состояний, событий и переходов между состояниями.

В статьях про автоматное программирование с сайта университета ИТМО приводятся примеры использования автоматного программирования для разработки микроконтроллеров.

Сам Шалыто в своих статьях упирает на то, что использовать автоматное программирование надо повсеместно. Такие программы проще в отладке и подаются неведомому мне Model Checking.

Это полностью укладывается в мою вчерашнюю фразу по интереснyю концепцию написания программ. По-видимому это были отголоски предыдущих попыток осознать автоматное программирование.

Мне кажутся перспективными следующие моменты:

  • Идея состояний - четко выделив состояния, мы можем определить так называемое фазовое пространство системы и в нем доказывать разные свойства, обычно состояние в программе не выделяется и на осознается, от этого не понятны краевые условия. Они не понятны и не проверяются, а в эксплуатации из-за этого происходят ошибки.
  • Идея событий - события это очень модная сейчас тема, которая под вывеской реактивного программирования переходит из UI в серверное программирование. Если совместить события с состояниями, то получается очень мощная концепция разработки, которая не раз помогала мне в решении различных багов при многопоточном программировании. Когда мы выделяем события, мы тем самым определяем что может произойти в системе. Выделив события мы чисто формально можем создать цепочки событий и применить их к выделенным состояниям. И в этом случае становится просто убедиться, что отсутствуют ошибки при любых событиях в любых состояниях. Если же ошибка все таки находится, это значит только что мы неправильно определили состояния или не учли все события.
  • События и состояния недостаточны для моделирования окружающего мира, поэтому в автоматном программировании используются обработчики переходов из состояния в состояние.

Даже базовое примение этих концепций, без формальных доказательств, приводи к упрощению по крайней мере разработки пользовательских интерфейсов. Это странно, но я вижу несколько причин недостаточного развития автоматного программирования:

  • Авторы упирают на графические интерфейсы, что не есть гуд. Опыт показал, что текстовое представление предпочтительней.
  • Большое количество примеров касается лифта, что не является классическим примером для программирования, по-видимому школа ИТМО не заморачивалась сильно на пользовательские интерфейсы, или я еще не нашел нужных данных.
  • Возможно, просто не нашелся герой, который двинет автоматное программирование в массы.