Size: a a a

2019 October 15

ŹR

Źmićer Rubinštejn in ErlangRus
источник

AB

Alex Bubnov in ErlangRus
а, так это ж нифы, там конечно нет особенно никаких атомов
источник

PK

Petr Kozorezov in ErlangRus
Alex Bubnov
я вообще не понимаю языка для beam, в котором нет литералов для атомов
При наличии нормальной системы типов в языке (где есть алгебраические типы данных) атомы не так уж и нужны.
источник

PK

Petr Kozorezov in ErlangRus
Но атомы вполне могут использоваться как инструмент для построения такой системы.
источник

PK

Petr Kozorezov in ErlangRus
Как пример {ok, Value} | {error, Reason}
источник

PK

Petr Kozorezov in ErlangRus
По факту это enum, но в эрланге приходится городить через атомы.
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Petr Kozorezov
По факту это enum, но в эрланге приходится городить через атомы.
Так можно дойти и до хаскеля, но зачем
источник

VS

Vladimir Sekisov in ErlangRus
Petr Kozorezov
При наличии нормальной системы типов в языке (где есть алгебраические типы данных) атомы не так уж и нужны.
ну вот этого я у gleam не нашел, без ADT его типы могут только  гемороем быть
источник

PK

Petr Kozorezov in ErlangRus
Źmićer Rubinštejn
Так можно дойти и до хаскеля, но зачем
Писать сложную бизнес логику на эрланге неудобно. Приходится городить кругом спеки, чекать их диалайзером, и тд (и/или кучу тестов, что не сильно лучше). А хочется просто статической типизации, чтобы проверить всё при компиляции.
источник

ŹR

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

PK

Petr Kozorezov in ErlangRus
Vladimir Sekisov
ну вот этого я у gleam не нашел, без ADT его типы могут только  гемороем быть
pub enum Tree(value) =
 | Leaf(value)
 | Node(Tree(value), Tree(value))

https://gleam.run/tour/enum.html
источник

PK

Petr Kozorezov in ErlangRus
Źmićer Rubinštejn
Или взять елексир, где протоколы и структуры в принципе все закрывают
Это всё про другое.
источник

AB

Alexander Bogosyan in ErlangRus
Мне тут нужно синхронно подождать некоторого условия, хочу в общем виде это реализовать типа: await(Fun, Timeout) где Fun должна вернуть значение или retry. Вопрос что лучше внутрь  этого await запихать? Есть вариант сделать spawn и в нем крутить функцию, а в вызывающем процессе ждать на  receive с таймаутом, можно также использовать локальный rpc:call или async_call, этот вариант мне нравится так как получается некий аналог future/promise, а может что то готовое есть или где подсмотреть?
источник

AB

Alexander Bogosyan in ErlangRus
В целом некий аналог task из elixir только попроще
источник

СИ

Сергей Иванов in ErlangRus
Alexander Bogosyan
Мне тут нужно синхронно подождать некоторого условия, хочу в общем виде это реализовать типа: await(Fun, Timeout) где Fun должна вернуть значение или retry. Вопрос что лучше внутрь  этого await запихать? Есть вариант сделать spawn и в нем крутить функцию, а в вызывающем процессе ждать на  receive с таймаутом, можно также использовать локальный rpc:call или async_call, этот вариант мне нравится так как получается некий аналог future/promise, а может что то готовое есть или где подсмотреть?
а proc_lib:start/3/4 init_ack не?
источник

AB

Alexander Bogosyan in ErlangRus
Сергей Иванов
а proc_lib:start/3/4 init_ack не?
Как вариант, спасибо
источник

AB

Alexander Bogosyan in ErlangRus
Надо поглядеть что там внутри
источник

ML

Maksim Lapshin in ErlangRus
А у тебя разные процессы могут ждать одну переменную?
источник

AB

Alexander Bogosyan in ErlangRus
Нет
источник

СИ

Сергей Иванов in ErlangRus
Alexander Bogosyan
Надо поглядеть что там внутри
как раз то, что ты предлагаешь завелосипедить monitor|link+receive
источник