Re[21]: Result objects - все-таки победили Exceptions?
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.01.25 04:22
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Я разрабатывал язык в котором по умолчанию любая функция шаблонная, которая по контексту определяет какие у неё параметры, сколько их и что она возвращает. Так вот это полный треш когда изменение в одной функции по цепочке приводило к тому, что компилятор что-то своё додумал в другом файле проекта и по итогу в лучшем случае ошибка компиляции, в худшем просто хрень выводится.

TB>А ещё малозаметные проблемы когда компилятор из-за незначительных нюансов для двух наборов параметров навыводил разные перегрузки (ну типа в одном случае он решил передавать копию потому что объект временный, а в другом ссылку), и в бинарнике появляются две почти одинаковые функции. Раздувание бинарника на пустом места.
Да, такая штука очень плохо дружит с перегрузками. Во flow9 перегрузок нет, что ограничивает некоторые сценарии.

TB>В языке был механизм явно указывать сигнатуру, который изначально был нужен лишь для экспорта функций. Но на деле оказалось что всю бизнес-логику тоже намного проще писать явными сигнатурами, потому что тогда компилятору меньше работы, и если он что-то понял не так, то он сообщает об этом максимально близко к источнику проблемы.

Ну вот видите — это и есть примерно то, что нужно.

S>>Ну, вот это и мешает писать нормально.


TB>Как-то так. Объединять типы надо вручную

TB>Проблема не нова
TB>https://www.reddit.com/r/rust/comments/jwnsp4/anonymous_sum_types_for_rust_error_handling/
Да, там всё верно описано.

S>>Одно и то же. И B|(C|A) — тоже.


TB>А, то есть значок | грубо говоря в зависимости от операндов делает либо

TB>- множество из двух элементов
TB>- множество с добавленным элементов
TB>- объединение множеств
Он всегда делает объединение множеств. Просто множество может состоять из одного элемента.
TB>А там может оказаться алгебраическая сумма int64_t | long long int? Или это таки один тип?
В тайпскрипте таких типов нет, там есть просто number. Зато можно объединять что угодно.
Во flow9 примитивные типы есть, но они не могут быть частью алгебры типов. То есть объединить int и float нельзя.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.