Здравствуйте, LaPerouse, Вы писали:
LP>Возвращать код ошибки — это прошлый век.
Код ошибки — да, прошлый век.
Алгебраический тип — нет.
LP>Для ошибок есть исключения.
В требовательном к надежности коде исключения неприемлемы. В таких случаях что взять в качестве альтернативы union-типам?
(Хотя лично мое мнение — исключения вообще не нужны, но это уже к теме не относится.)
Ну или другой пример — передача в функции нуллабельных ссылок. Здесь какие варианты? Хардкод особого "нулла" в компиляторе, без контроля разыменования, как сейчас везде сделано?
LP>foo (Foo val1 val2) = val1 + val2
LP>foo (Foo val1 val2 val3) = val1 + val2
LP>Добавляем в Foo третье поле val3. Конкретно в функции foo это поле НЕ используется. Но мы должны ее изменить
Разумеется, мы должны ее изменить. Потому что сейчас не используется, а через месяц будет использоваться. Это уже деталь реализации — что используется, а что нет.
LP>И таких функций по всему коду — море, в разных модулях и классах.
Ну и что?
Когда мы добавляем параметр функции, у нас тоже море вызовов по всему коду, которые надо изменить.