Re[11]: Result objects - все-таки победили Exceptions?
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.01.25 08:31
Оценка:
Здравствуйте, korvin_, Вы писали:
_>Сейчас это нигде не указано, кроме, разве что документации. Но вы не про документацию писали, а систему типов.
С моей точки зрения это примерно одно и то же. Вопрос именно в том, какой тип имеет результат операции new.

_>Удачи убедить хоть кого-нибудь писать на таком языке.

Возможно, вы правы.

_>И как это должно выглядеть?

Давайте повернём вопрос в другую сторону: а как это сделано в Haskell?
Я бегло почитал — ребята пишут, что исключения не требуют специальной языковой поддержки, т.к. для них достаточно монад. Ну, ок.
А что произойдёт, если хаскелл не смог сконструировать Add из Expr и Expr из-за OutOfMemory или StackOverflow?

_>-- ну и print, конечно, должен иметь сигнатуру вида

_>-- print :: Show a => (a | OOM) -> (IO () | OOM)
_>[/haskell]

_>То есть фактически OOM придётся писать буквально везде. Добавим сюда также StackOverflow, DivisionByZero и чёрт знает что ещё.

Я не очень понимаю, почему нам придётся писать OOM буквально везде. В первом варианте вы не писали никаких сигнатур у Add Expr Expr, а добавление OOM почему-то его потребовало.
Почему нельзя было просто добавить OOM в определение Expr как одной из альтернатив?

_>Удачи убедить хоть кого-нибудь писать на таком языке, да и самому не свихнуться от такого.

На первый взгляд, Хаскелл как раз такой язык. В том смысле, что я не могу просто взять и сделать throw в произвольном месте, не меняя сигнатуру функции (как это сделано в C++ и C#)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.