История изменений
Исправление Freyr69, (текущая версия) :
В теории (всмысле формальной теории ЯП [1]) исключение ничем от резалт монады не отличается. То и другое — первоклассные эффекты, это буквально одно и то же (точнее монады и эффекты в целом одно, достаточно посмотреть на монадическую и «эффектную» реализацию стэйт [2]). Разница в реализации, что какой оверхед вносит.
В крестах то и другое реализовано одинаково убого: резалт криво и небезопасно, так как нет нормальных тип-сумм, исключения никак не отражаются в системе типов (хотя явно безопаснее и более sound, чем недоразумение под названием std::variant и ему подобные), так что даже и не скажешь, бросает тот или иной код исключение или нет (вроде же хотели, но не осилили). Чсх у людей получилось бэкпортировать типизированные эффекты в окамл [3], в кресты тоже можно бы было, так как вывод типов вроде как есть. В лиспе вон выкинутое исключение хотя бы динамически можно пофиксить и продолжить выполнение, плюс во многих языках есть стандартные обработчики.
[1] https://www.cs.uoregon.edu/research/summerschool/summer18/topics.php#Bauer
[2] https://github.com/ocamllabs/ocaml-effects-tutorial/blob/master/sources/solve...
Исходная версия Freyr69, :
В теории (всмысле формальной теории ЯП [1]) исключение ничем от резалт монады не отличается. То и другое — первоклассные эффекты, это буквально одно и то же (точнее монады и эффекты в целом одно, достаточно посмотреть на монадическую и «эффектную» реализацию стэйт [2]). Разница в реализации, что какой оверхед вносит.
В крестах то и другое реализовано одинаково убого, резалт криво и небезопасно, так как нет нормальных тип-сумм, второе никак не отражается в системе типов (хотя явно безопаснее и более sound, чем недоразумение под названием std::variant и ему подобные), так что даже и не скажешь, бросает тот или иной код исключение или нет (вроде же хотели, но не осилили). Чсх у людей получилось бэкпортировать типизированные эффекты в окамл [3], в кресты тоже можно бы было, так как вывод типов вроде как есть. В лиспе вон выкинутое исключение хотя бы динамически можно пофиксить и продолжить выполнение, плюс во многих языках есть стандартные обработчики.
[1] https://www.cs.uoregon.edu/research/summerschool/summer18/topics.php#Bauer
[2] https://github.com/ocamllabs/ocaml-effects-tutorial/blob/master/sources/solve...