Size: a a a

2020 February 11

ES

Evgeniy Shishkin in ErlangRus
Добрый день! Можно ли в Эрланге сериализовать функцию в байткод (без зависимостей) так, чтобы этот байткод можно было передать удаленной стороне, которая ничего не знает про модуль этой функции и выполнить его там. Если послылать fun, то передается лишь ссылка на функцию, но не сама функция.
источник

ES

Evgeniy Shishkin in ErlangRus
Удаленная сторона - это тоже эрланг нода.
источник

AK

Aleksey Kluchnikov in ErlangRus
Можно но это антипатерн
источник

AK

Aleksey Kluchnikov in ErlangRus
вернее не просто можно, а оно из коробки работает, анонимная функция при передаче на другую ноду сереализуется
источник

AK

Aleksey Kluchnikov in ErlangRus
но разбираться потом с такими приемами сложно
источник

ES

Evgeniy Shishkin in ErlangRus
Насколько я понимаю, у вас это заработает из коробки в том случае, если множество загруженных модулей на нодах совпадает. Иначе будут проблемы с зависимыми функциями.
источник

AK

Aleksey Kluchnikov in ErlangRus
нет, при передаче на другую ноду, сереализуется фуна
источник

AK

Aleksey Kluchnikov in ErlangRus
в пределах ноды ссылка
источник

ES

Evgeniy Shishkin in ErlangRus
Сериализуется только функция верхнего уровня, то есть код того самого fun() который передается, в то время как вызываемые внутри fun() функции заменяеются ссылками, которые и сериализуются. Пока что так выглядит.
источник

DF

Denis Fakhrtdinov in ErlangRus
Иначе пришлось бы передавать весь OTP.
источник

AK

Aleksey Kluchnikov in ErlangRus
не увлекайтесь анонимными функциями, юзайте их в пределах обычных функций
источник

AK

Aleksey Kluchnikov in ErlangRus
иначе потом оно вылезет вам
источник

YZ

Yuri Zhloba in ErlangRus
Evgeniy Shishkin
Сериализуется только функция верхнего уровня, то есть код того самого fun() который передается, в то время как вызываемые внутри fun() функции заменяеются ссылками, которые и сериализуются. Пока что так выглядит.
Кажется, это так и должно работать. Иначе нужно передавать все зависимые функции и модули. А это лучше делать не передачей по сети, а деплоем одинакового кода на разные машины. Что, собственно, все и делают.
источник

AK

Aleksey Kluchnikov in ErlangRus
и внутри анонимных функций не стоит сильно использовать обычные функции не из стандартной либы
источник

AK

Aleksey Kluchnikov in ErlangRus
потому что сломаете горячую подгрузку кода, а это крутой инструмент
источник

YZ

Yuri Zhloba in ErlangRus
При желании можно изобрести систему деплоя прям модулей и приложений внутри эрланга. Но выгоды такой системы трудно придумать.
источник

DF

Denis Fakhrtdinov in ErlangRus
Можно фаны класть в базу.
источник

DF

Denis Fakhrtdinov in ErlangRus
Звучит как отличный способ провести выходные.
источник

V

Vasilii Demidenok in ErlangRus
главное не забыть задеплоить в пятницу, ага)
источник

AK

Aleksey Kluchnikov in ErlangRus
лучше побаловаться с lua, и его и передавать и в базу складывать. Хотябы будет ожидаемое поведение
источник