Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Использовать Result<'a, 'e> вместо исключений для ошибок библиотеки #22

Open
DragonFrai opened this issue Dec 4, 2023 · 0 comments
Labels
feature futures Assigned with futures module

Comments

@DragonFrai
Copy link
Owner

Когда мы рассматриваем какие-нибудь инструменты для связывания двух Future, например Future ожидающая запущенную на Executor'е Future, или передача результата одной в другую через OnceVar - выброс исключения одного конца на другом выглядит нормально, т.к. это все исключения пользовательского кода.
Но ошибки самих примитивов (например Abort FutureTask) смешиваются с пользовательскими, и к тому же, сами ошибки становятся неявными и выводимыми только из документации.

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

Чтобы сохранить баланс, можно воспользоваться продиктованным стандартной библиотекой правилом и ввести функции разного стиля: Foo: _ -> 'a + TryFoo: _ -> Result<'a, 'e>. Этот стиль отдает предпочтение функциям выкидывающих исключения. На практике, ошибки в примитивах Future в ряде случаев могут быть подняты до предметных, а хорошим стилем будет только пробрасывать исключения без строительства поверх них предметной логики, по этой причине я бы отдал предпочтение стилю: Foo: _ -> Result<'a, 'e>, где исключения продуцируются через композицию с Result.get.

@DragonFrai DragonFrai added feature futures Assigned with futures module labels Dec 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature futures Assigned with futures module
Projects
None yet
Development

No branches or pull requests

1 participant