
Evgeny
26.12.2017
13:40:55
все больше и больше ассоциаций с кофескриптом. :)
не туда вставил перевод строки и все поломалося :)

Anatoliy Kovalchuk
26.12.2017
13:41:30
Ты о чем?

Nikita
26.12.2017
13:41:31
sum(A,B) -> A + B. и фсё

Google

Alexey
26.12.2017
13:41:45
простые ф-ции будут названы просто, зачем тебе по ним носиться?
тем более они тут же будут
зато потом, когда их станет много, ты их просто вынесешь в другой модуль

Evgeny
26.12.2017
13:42:08
зачем их вообще выносить, если они занимают 10 символов?

Alexey
26.12.2017
13:42:08
по каким-то критериям
потому что код развивается
сегодня 10, завтра 100

Evgeny
26.12.2017
13:42:40
это не будет развиваться, я гарантирую это
то что развивается заранее бьется на модули и функции

Alexey
26.12.2017
13:42:53
тогда .()
тебе же оставили такую возможность, просто показывают что это не очень
и что не надо так)

Evgeny
26.12.2017
13:43:27
а, ты все еще про анонимки в пайпе, а я про генераторы :D

Google

Alexey
26.12.2017
13:43:38
ну так там тоже самое
for a <- FirstService.call,
b <- SecondService.call,
do: Processing.call(a, b)
defmodule Processing do
def call(10, _), do: ...
def call(20, value), do: ...
end
и тд
просто сколько приходилось видить for'ы, обычно в них стараются впихнуть не впихуемое
а потом еще и развивают там же

Evgeny
26.12.2017
13:44:35
там все гораздо проще, просто дербанится некая структура данных, которая никогда за пределы данного модуля не вылезет
ладно, забили, это вкусовщина
кстати, такой вариант выглядит неплохо. на нем и остановлюсь
for a <- FirstService.call,
b <- SecondService.call,
do: Processing.call(a, b)
лучше, чем
for a <- FirstService.call,
b <- SecondService.call do
Processing.call(a, b)
end

Nikita
26.12.2017
13:56:48
это эрланг :)

Evgeny
26.12.2017
13:57:37
изверг
я уже хотел обрадоваться...

Taras ?
26.12.2017
14:10:36
тю) вынести отдельно функции в эрланг-модуль и радоваться

Vladimir
26.12.2017
14:13:03
наверное можно макрос написать, чтобы задавать функцию в стиле Эрланга)

Vladimir
26.12.2017
14:17:48
хорошо что нельзя наоборот

Evgeny
26.12.2017
14:44:54

Andrey
26.12.2017
15:09:58
не вижу причин почему не смогут

Evgeny
26.12.2017
15:17:57
Как сделать так, чтобы супервизор рестартовал подохший генсервер с последним стейтом?
или это уже забота самого генсервера?

Google

Andrey
26.12.2017
15:22:51
в общем случае супервизор не должен заниматься состоянием GS, он может знать только начально, но не произвольное

Taras ?
26.12.2017
15:23:38

Vladimir
26.12.2017
15:44:05

Evgeny
26.12.2017
15:44:43
при релоаде генсервера стейт сохраняется
я подумал может есть штатные средства
значит генсервер сам должен держать свой стейт например в ETS и загружать его при старте

Vladimir
26.12.2017
15:45:31
релоад кода не равно падению и рестарту генсервера от ексепшена

Evgeny
26.12.2017
15:45:48
спасибо Капитан Очевидность :D
кстати, когда супервизор ловит сигнал о гибели генсервера, то в этот момент генсервер еще жив? Или его состояние неведомо
я к тому, можно ли извлечь его стейт пока оно не подохло совсем?
короче, насколько я понял, вполне возможно написать некое расширение генсервера, который будет перехватывать эксепшены, писать стейт в ETS и только после этого умирать в жутких мучениях

Dmitry
26.12.2017
17:07:16
Почему я за полтора года ни разу не столкнулся с вышеназванными проблемами?

Dmitry
26.12.2017
17:07:28
А хрен его знает
Я наверное программирую что-то не то

Evgeny
26.12.2017
18:01:18

Alexander
26.12.2017
18:21:31
Вообще смысл let it crash в том, что состояние скорее всего поломалось, и запуск заново с начальным, которое вероятно хорошее - самый простой вариант
Как ребут компа
Так что не надо, наверное, сохранять состояние, в общем случае

Ilja
26.12.2017
18:51:15
Есть хорошо описанный подход под названием Stash.
Надо сохранять.

Google

Ilja
26.12.2017
18:52:04
У генсервера есть возможность выполнить сохранение перед тем, как он будет остановлен в соответствии со стратегией супервизора.
При старте ему в инит передаётся адрес стэша, у которого он это состояние получает. А перед смертью туда отправляет.
Но таких генсерверов сравнительно немного; больше stateless, которым стэш не нужен.

Alex
26.12.2017
18:53:57
http://erlang.org/download/armstrong_thesis_2003.pdf

Admin
ERROR: S client not available

Ilja
26.12.2017
18:59:16
?
https://forums.pragprog.com/forums/322/topics/11977
Меня вот больше другой вопрос волнует: когда воркер падает - куда девается его мэйлбокс? Что с этим делать?

Alex
26.12.2017
19:02:45

Ilja
26.12.2017
19:18:44
Необязательно. Может быть, просто некорректное сообщение пришло, а состояние надо сохранить. Новое состояние возвращается в результате обработки сообщения. Если обработка не завершилась - с чего ему портиться? То есть, разные ситуации бывают, конечно...

Alex
26.12.2017
20:34:56
и ничего с этим не поделать
следовательно, в мейлбоксе ничего важного задерживаться не должно

Yuri
26.12.2017
22:35:39
Есть тупой вопрос, как из [%{name: "name"}, %{body: "body"}] сделать нормальный мап %{name: "name", body: "body"}

Dmitry
26.12.2017
22:44:13
iex(3)> [%{name: "name"}, %{body: "body"}] |> Enum.reduce(%{}, fn a, e -> Map.merge(a,e) end)
%{body: "body", name: "name"}
[%{name: "name"}, %{body: "body"}] |> Enum.reduce(&Map.merge(&1, &2))или так, если короче и непонятнее

Yuri
27.12.2017
06:04:38

Evgeny
27.12.2017
08:31:46

Vladimir
27.12.2017
08:38:58
let it crash божественнен
если в gen_server есть какое-то ценное состояние которое не хочется терять после падения, значит это состояние должно лежать в другом месте

Google

Alex
27.12.2017
08:39:59
+1

Alexander
27.12.2017
08:41:06
концепция лет ит креш сама по себе не является чем-то новым, даже самый зассанный питонячий скрипт за супервизором уже даст те же ощущения. В эликсире летит креш от эрланга, когда довольно ветвистый монолит может потерять терять части и не падать весь.
в случае микросервиса на эликсире, лет ит креш - просто нож в спину

Alex
27.12.2017
08:43:03
ты же решил эту проблему )

Alexander
27.12.2017
08:43:13
костылем
к которому эликсир не имеет отношения вообще
рядом с церковью Свидетелей святого пайпа есть еще небольшой сарай с теми кто верит в лет ит креш

Vladimir
27.12.2017
08:44:44
=)
а когда из-за него могут быть проблемы?
Пока нет в голове такой ситуации

Alexander
27.12.2017
08:45:28
я прошел все стадии, и пайп и лет ит креш и микросервисы и апи на эликсире, а фронт на %модныйjsфреймворк%
а когда из-за него могут быть проблемы?
апи, идет случка с аптекой, в которой фармацевт поймал интернет вешалкой стоя на табурете. И тут у тебя лет ит креш. Стрим захлебнулся, аптека ушла в луп, фармацевт навернулся с табуретки

Evgeny
27.12.2017
08:47:48

Alex
27.12.2017
08:49:09

Vladimir
27.12.2017
08:49:20