История изменений
Исправление AndreyKl, (текущая версия) :
(дада в этом самом ООП такого никогдаб не произошло)
Этого никогда бы не произошло в языке с зависимыми типами. Вот пример реализации сетевого протокола.
http://docs.idris-lang.org/en/latest/st/examples.html
Как можно видеть, всё состояние выражено в типах. Т.е. компилятор, для нашего случая, просто не позволил бы вызвать любую функцию доступную «авторизованному» подмножеству функций из неавторизованного состояния. И пишется это легко и элегантно, с полной компил-таймовой проверкой (в отличие от рантаймовой при реализации стейт-машин на си).
(вот тут получше разжёвано и пример попроще, кому интересно http://docs.idris-lang.org/en/latest/st/machines.html )
Исправление AndreyKl, :
(дада в этом самом ООП такого никогдаб не произошло)
Этого никогда бы не произошло в языке с зависимыми типами. Вот пример реализации сетевого протокола.
http://docs.idris-lang.org/en/latest/st/examples.html
Как можно видеть, всё состояние выражено в типах. Т.е. компилятор, для нашего случая, просто не позволил бы вызвать любую функцию доступную «авторизованному» подмножеству функций из неавторизованного состояния. И пишется это легко и элегантно, с полной компил-таймовой проверкой (в отличие от рантаймовой при реализации стейт-машин на си).
(вот тут получше разжёвано на другом примере кому интересно http://docs.idris-lang.org/en/latest/st/machines.html )
Исправление AndreyKl, :
(дада в этом самом ООП такого никогдаб не произошло)
Этого никогда бы не произошло в языке с зависимыми типами. Вот пример реализации сетевого протокола.
http://docs.idris-lang.org/en/latest/st/examples.html
Как можно видеть, всё состояние выражено в типах. Т.е. компилятор, для нашего случая, просто не позволил бы вызвать любую функцию доступную «авторизованному» подмножеству функций из неавторизованного состояния. И пишется это легко и элегантно, с полной компил-таймовой проверкой (в отличие от рантаймовой при реализации стейт-машин на си).
(вот тут получше разжёвано на другом примере кому интересно http://docs.idris-lang.org/en/latest/st/examples.html )
Исправление AndreyKl, :
(дада в этом самом ООП такого никогдаб не произошло)
Этого никогда бы не произошло в языке с зависимыми типами. Вот пример реализации сетевого протокола.
http://docs.idris-lang.org/en/latest/st/machines.html
Как можно видеть, всё состояние выражено в типах. Т.е. компилятор, для нашего случая, просто не позволил бы вызвать любую функцию доступную «авторизованному» подмножеству функций из неавторизованного состояния. И пишется это легко и элегантно, с полной компил-таймовой проверкой (в отличие от рантаймовой при реализации стейт-машин на си).
Исправление AndreyKl, :
(дада в этом самом ООП такого никогдаб не произошло)
Этого никогда бы не произошло в языке с зависимыми типами. Вот пример реализации сетевого протокола.
http://docs.idris-lang.org/en/latest/st/machines.html
Как можно видеть, всё состояние выражено в типах. Т.е. компилятор, для нашего случая, просто не позволил бы вызвать любую функцию доступную «в авторизованном» подмножестве из неавторизованного состояния. И пишется это легко и элегантно, с полной компил-таймовой проверкой (в отличие от рантаймовой при реализации стейт-машин на си).
Исходная версия AndreyKl, :
(дада в этом самом ООП такого никогдаб не произошло)
Этого никогда бы не произошло в языке с зависимыми типами. Вот пример реализации сетевого протокола.
http://docs.idris-lang.org/en/latest/st/machines.html
Как можно видеть, всё состояние выражено в типах. Т.е. компилятор, для нашего случая, просто не позволил бы вызвать любую функцию доступную «в авторизованном» подмножестве из неавторизованного состояния. И пишется это легко и элегантно.