Size: a a a

2020 February 25

B

Bogdan in pro.elixir
Lama Lover
Мне продолжать?
Сколько тебе угодно)
источник

B

Bogdan in pro.elixir
Ты очень профессионален
источник

LL

Lama Lover in pro.elixir
Bogdan
Сколько тебе угодно)
Я напишу бота, который будет брать рандомную хуйню из OTP и делать это сообщение
источник

LL

Lama Lover in pro.elixir
В этот чат
источник

LL

Lama Lover in pro.elixir
Каждый день
источник

B

Bogdan in pro.elixir
спасибо)
источник

P

Pavel in pro.elixir
бот ебанется на send/receive
источник

B

Bogdan in pro.elixir
«Personally, I mostly don’t use Agent and start immediately with GenServer. Because converting an Agent into a GenServer requires some work, I’d much rather start with GenServer immediately. As an added bonus, this keeps the code more uniform, because all the server processes are implemented using the same abstraction. If you feel confused and aren’t sure whether to use Agent or GenServer, my advice is to always go for GenServer because it covers more scenarios and it’s not much more complicated than Agent.»
источник

VS

Viacheslav Shevchenko in pro.elixir
Andrey Andreev
Друзья, подскажите плз чем кардинально отличается GenServer от Agent?
Агент это реализация генсервера для хранения данных. Их нельзя сравнивать. Загляните лучше в исходник там 50 строк
источник

V

V in pro.elixir
Viacheslav Shevchenko
Агент это реализация генсервера для хранения данных. Их нельзя сравнивать. Загляните лучше в исходник там 50 строк
Если агент - частный случай генсервера, то их вполне можно сравнивать.
источник

LL

Lama Lover in pro.elixir
Кстати, интересно что агенты в эликсире очень похожи на атомы в лиспах
источник

PG

Pïg Grëënëst in pro.elixir
Поясни
источник

LL

Lama Lover in pro.elixir
Ну ты явно передаёшь функции для изменения, а не конкретное значение, которое хочешь положить
источник

PG

Pïg Grëënëst in pro.elixir
Атомы в биме похожи на атомы в лиспах
источник

LL

Lama Lover in pro.elixir
Тогда я проебался
источник

LL

Lama Lover in pro.elixir
источник

V

V in pro.elixir
Andrey Andreev
Друзья, подскажите плз чем кардинально отличается GenServer от Agent?
https://medium.com/scientific-breakthrough-of-the-afternoon/elixir-agent-vs-genserver-ef443aa4a441
Агент построен на основе GenServer, даёт готовые блокирующие методы get, get_and_update и т.д.
Код Agent https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/agent.ex
Agent при работе запускает Agent.Server, который построен на GenServer https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/agent/server.ex
Сам GenServer вот если интересно https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/gen_server.ex
Как это работает. Допустим ты вызываешь Agent.get. Он посылает сообщение Agent.Server-у, хранящему состояние https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/agent.ex#L335 . call - это блокирующий вызов, обрабатывается здесь https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/agent/server.ex#L11-L13
блокирующий означает что
- выполнение кода в Agent.get будет остановлено в ожидании, пока в ответ на отправку call прилетит тупл {:reply, _}, т.е. как будто бы произошёл синхронный вызов функции
- процесс, хранящий состояния (в данном случае это один из запущенных Agent.Server) не будет считывать другие сообщения из мессаджбокса, пока не выполнит текущий handle_call. (Если я правильно понимаю - не будет обрабатывать вызовы handle_call, handle_cast, handle_info, если ошибаюсь - пусть коллеги меня поправят).
источник

V

V in pro.elixir
Lama Lover
Ты не понимаешь, это семантическое разделение. Если у твоей программы есть хотя бы какая-нибудь архитектура, то ты сможешь понять что в ней данные, а что в ней функции. Для этого и существует такое разделение

GenServer обрабатывает данные
Agent хранит данные.

Пример, который приходит в голову: есть пулл процессов, которые обрабатывают запросы. Нужно считать сколько запросов обработали. Если запросов не много, то проще всего реализовать Agent, который просто хранит число.
> GenServer обрабатывает данные
> Agent хранит данные.

Сказал так, как будто GenServer не хранит данные.
источник

B

Bogdan in pro.elixir
ага))
источник

V

V in pro.elixir
Lama Lover
GenServer это процесс, который хранит данные и умеет принимать сообщения и обрабатывать синхронные вызовы
Вот тут правильно сказал, GenServer хранит данные.
источник