Re[14]: Result objects - все-таки победили Exceptions?
От: korvin_  
Дата: 10.01.25 13:55
Оценка: 2 (1)
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, korvin_, Вы писали:

_>>Что именно? OOM там не ловится никак. То же самое с SO — это внутренняя вещь рантайма.
S>Ну, то есть panic. Скажем так: в такой среде сложно писать софт, который должен работать 24*7.

Вот интересно, а что вы делаете в Java при получении OOM?

_>>В остальном — по-разному. Например, функция div имеет тип (Integral a => a -> a -> a) без указания какого либо исключения деления на 0, но исключение может возникнуть.

S>Хм. То есть кидать можно всё, что угодно и где угодно?
S>Я посмотрел вот сюда. Написано
S>

S>The great thing about Haskell is that it is not necessary to hard-wire the exception handling into the language.

S>То есть исключений нет, но если хочется прикрутить их поддержку, то можно их реализовать самостоятельно.
S>Читаем дальше:
S>

S>Haskell solves the problem a diplomatic way: Functions return error codes, but the handling of error codes does not uglify the calling code.

S>Там написана неправда?

Там написано не про это. Насчёт does not uglify the calling code я бы поспорил.

_>>Ну не совсем.


S>>>А что произойдёт, если хаскелл не смог сконструировать Add из Expr и Expr из-за OutOfMemory или StackOverflow?

_>>Упадёт.
S>Как-то грустненько.

А что вы предлагаете делать при OOM?

S>>>Почему нельзя было просто добавить OOM в определение Expr как одной из альтернатив?


_>>Потому что OOM — это не часть Expr. Сигнатуры в примере с OOM вымышленные.

_>>Что нам даст добавление OOM в качестве альтернативы?
_>>Эти альтернативы -- просто конструкторы значений.
S>А выглядит как алгебраический тип.

Это алгебраический тип, но при чём тут это?

_>>Всё равно, что в Java написать


_>>
_>>var oom = new SomeInterface() {
_>>    ...
_>>};
_>>

_>>Как это поможет?
S>Поможет не писать везде Expr | OOM, а встроить OOM в Expr.

И что с ним делать в Expr? Давайте добавим. Как это отразится на expr0? Что вообще дальше делать с этим OOM?

_>>
_>>expr0 = If (Mul ...) ... -- где здесь OOM?
_>>

S>В рамках Haskell, наверное, нигде. Язык не готов к работе в условиях дефицита памяти

Где бы он был в Java?

_>>IO так и делает: бросает исключения без указания в сигнатуре.

S>Ну, то есть в IO встроена возможность бросать всё что угодно? откуда в div появилась возможность "бросить" divisionByZero?

Нет, там какая-то чёрная магия с примитивами: https://hackage.haskell.org/package/ghc-prim-0.13.0/docs/src/GHC.Prim.html#raise%23
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.