Size: a a a

2019 September 24

A

Andrey in ErlangRus
Вопрос не зачем, а как )
источник

A

Andrey in ErlangRus
видимо вот так
Info = erlang:fun_info(Fun)
Mod = proplists:get_value(module, Info),
Name = proplists:get_value(name, Info),
erlang:apply(Mod, Name, Params).
источник

СИ

Сергей Иванов in ErlangRus
Andrey
вот захотелось вдруг lazy:cast(fun some:foo/3, [1,2,3])
ну и зачем валидировать? пусть отвечает тот кто закастил. используй apply. умная валидация создаст скрытые и наведенные баги
источник

EM

Evgeny M. in ErlangRus
если Params и арность заренее известны можно без apply - просто Mod:Name(Param1, ..., ParamN)
источник

VS

Vladimir Sekisov in ErlangRus
в общем случае примерно так:
case HlrF of
 {M, F} -> apply(M, F, Params);
  {M, F, A} -> apply(M, F, Params ++ A);
  _ when is_function(HlrF) -> apply(HlrF, Params)
end
источник

A

Andrey in ErlangRus
Evgeny M.
если Params и арность заренее известны можно без apply - просто Mod:Name(Param1, ..., ParamN)
не известны
источник

A

Andrey in ErlangRus
в общем да, вопрос закрыт. erlang:apply  ключевой ответ
источник

DZ

Danil Zagoskin in ErlangRus
Коллеги, я хочу показать вам дичь.
Ещё в июле я упоролся поковырял новый эрланговый socket API на тему sendmsg в юникс-сокетах.
Сегодня вспомнил и выложил патч к OTP и демку:
 * https://github.com/erlang/otp/pull/2400
 * https://gist.github.com/stolen/303c30d4edbb8835f9bec3fad0d75ede

Теперь можно сокеты пересылать не только между процессами одной ВМ, но и даже в другую ВМ.
источник

ML

Maksim Lapshin in ErlangRus
Danil Zagoskin
Коллеги, я хочу показать вам дичь.
Ещё в июле я упоролся поковырял новый эрланговый socket API на тему sendmsg в юникс-сокетах.
Сегодня вспомнил и выложил патч к OTP и демку:
 * https://github.com/erlang/otp/pull/2400
 * https://gist.github.com/stolen/303c30d4edbb8835f9bec3fad0d75ede

Теперь можно сокеты пересылать не только между процессами одной ВМ, но и даже в другую ВМ.
объявлена неделя многопроцессных балансировщиков =)
источник

SP

Sergey Prokhorov in ErlangRus
ого... а для чего это нужно?
источник

ML

Maksim Lapshin in ErlangRus
слушай, а как попросить эрланг отказаться от сокета на посылающей стороне?
источник

ML

Maksim Lapshin in ErlangRus
Sergey Prokhorov
ого... а для чего это нужно?
у тебя мастер висит на порту 80 с правами рута и не делает вообще ничего и не апгрейдится следующие 10 лет, а слейвы рестартуются и запускаются с правами юзера
источник

DZ

Danil Zagoskin in ErlangRus
Danil Zagoskin
Коллеги, я хочу показать вам дичь.
Ещё в июле я упоролся поковырял новый эрланговый socket API на тему sendmsg в юникс-сокетах.
Сегодня вспомнил и выложил патч к OTP и демку:
 * https://github.com/erlang/otp/pull/2400
 * https://gist.github.com/stolen/303c30d4edbb8835f9bec3fad0d75ede

Теперь можно сокеты пересылать не только между процессами одной ВМ, но и даже в другую ВМ.
То есть, можно принять сокет в одной машине, отдать его другой машине, убить первую, и сокет продолжит работать.
Зачем это нужно,  я не очень придумал, но когда в следующий раз станет скучно, прикручу этот механизм к distribution over HTTP https://github.com/stolen/webdist
Но, возможно, это позволит делать горячее обновление кода пуще прежнего — с обновлением виртуальной машины
источник

DZ

Danil Zagoskin in ErlangRus
Maksim Lapshin
слушай, а как попросить эрланг отказаться от сокета на посылающей стороне?
я не понял вопрос. Возможно, код тебе ответит.
источник

ML

Maksim Lapshin in ErlangRus
Danil Zagoskin
я не понял вопрос. Возможно, код тебе ответит.
а, если прибить процесс на посылающей VM, то в принимающей VM не страшно
источник

ML

Maksim Lapshin in ErlangRus
а, во, вопрос
источник

ML

Maksim Lapshin in ErlangRus
если закрыть сокет на первой виртуалке, то RST не полетит?
источник

DZ

Danil Zagoskin in ErlangRus
Maksim Lapshin
если закрыть сокет на первой виртуалке, то RST не полетит?
я закрываю, и он не летит
источник

SY

Sergey Yelin in ErlangRus
Какая интересная фича...
источник

DZ

Danil Zagoskin in ErlangRus
Maksim Lapshin
если закрыть сокет на первой виртуалке, то RST не полетит?
  {ok, S} = gen_tcp:accept(TListen),
 {ok, FD} = inet:getfd(S),
 {ok, USock1} = pass_fd(FD, UListen, USock),
 gen_tcp:close(S),
источник