Size: a a a

2019 November 21

AB

Alexander Bogosyan in ErlangRus
Źmićer Rubinštejn
Слишком дорого по накладным расходам
я предполагаю что ошибки редкие будут
источник

AB

Alexander Bogosyan in ErlangRus
это типа многоступенчатой инициализации в gen_server:init, когда надо свести все вызовы в {ok, State} либо {stop, Reason}
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Я измерял - в 2 раза оверхед получается

https://ilhub.io/blog/2019/02/23/try-vs-case
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Но тебе решать конечно
источник

TH

Taras Halturin in ErlangRus
Alexander Bogosyan
это типа многоступенчатой инициализации в gen_server:init, когда надо свести все вызовы в {ok, State} либо {stop, Reason}
Инит должен быть простым, быстрым и лаконичным. Заталкивать туда большую логику крайне не рекомендуется
источник

AB

Alexander Bogosyan in ErlangRus
Taras Halturin
Инит должен быть простым, быстрым и лаконичным. Заталкивать туда большую логику крайне не рекомендуется
Кому должен?
источник

TH

Taras Halturin in ErlangRus
Ну, видимо вам ничего не должен ))
источник

AB

Alexander Bogosyan in ErlangRus
Taras Halturin
Ну, видимо вам ничего не должен ))
Аргументы есть за это? Я вот считаю что стартовать с неясным State а потом "доинициализироваться" это хуже чем "быстрый и лаконичный init"
источник

DF

Denis Fakhrtdinov in ErlangRus
Длинный init не отпускает супервизора.
источник

DF

Denis Fakhrtdinov in ErlangRus
Отложенный init тоже может быть tricky.
источник

ŹR

Źmićer Rubinštejn in ErlangRus
init просто синхронная операция же
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Супервизор блочится на время выполнения этого кода
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Получаестя, если у супервизора несколько процессов падают одновременно, то длинный инит тормозит перезапуск их.
источник

DF

Denis Fakhrtdinov in ErlangRus
Ну одно дело когда инит длинный, а другое — когда кучерявый.
источник

DF

Denis Fakhrtdinov in ErlangRus
:D
источник

DF

Denis Fakhrtdinov in ErlangRus
То есть ветвистый.
источник

ŹR

Źmićer Rubinštejn in ErlangRus
И даже если сегодня сегодня ты понимаешь, что делаешь, то завтра твой сосед проебется, подсунет что-нибудь еще в этот же супервизор и все пойдет попизде
источник

DF

Denis Fakhrtdinov in ErlangRus
Это уже даже не имеет отношения к программированию.
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Поэтому лучше потом упасть на “доинициализации” и проинформировать супервизор через reason об этом
источник

AB

Alex Bubnov in ErlangRus
Alexander Bogosyan
Имеет ли право такой подход:
maybe_throw({error, Reason}) -> throw(Reason);
maybe_throw(Else) -> Else.

и потом пишем линейный код в try/catch:
try
   {ok, Result1} = maybe_throw(some_api:foo1()),
   {ok, Reault2} = maybe_throw(some_api:foo2(Result1),
   .....
catch
   throw:Reason -> {error, Reason}
end
в принципе, это with для неэкономных, что вполне сойдет
источник