Size: a a a

2020 September 01

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
Диалайзер не умеет в маппинг gen_server:call в клоз handle_call.
Это правда
источник

DF

Denis Fakhrtdinov in pro.elixir
Ну так он промолчит, и будет прав.
источник

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
Ну так он промолчит, и будет прав.
Но если где-то в теле handle_* будет проиходить вызов функции с @spec func(foo()) :: any(), то диалайзер поругается
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Denis Fakhrtdinov
Возможно, это не принято в сообществе, но я уже объяснил почему это хороший тон. Если ты не согласен с аргументом — объясни почему. Бездумно обращаться к каким-то сферическим авторитетам — не самое умное.
Легко. Программировани - социальная дисциплина. Мы пишем код для того, чтобы его читать. Хороший тон - это писать такой код который каждый сможет прочитать. Если код “как бы умный, классный и вообще”, но тупо никто не знает что пишется так - это плохой тон.

Поэтому “не принято в сообществе, но хороший тон” - это взаимоисключающие понятия
источник

DF

Denis Fakhrtdinov in pro.elixir
Проблема в том, что в elixir такой код читается плохо, да.
источник

DF

Denis Fakhrtdinov in pro.elixir
В erlang он читается отлично.
источник

LL

Lama Lover in pro.elixir
Не так-то это правда, надо бы давно ввести макросы для тупплов.
Чтобы было проще писать вместо
res =
 some
 |> long()
 |> pipe()
 |> here()

{:ok, res}

Писать
some
|> long()
|> pipe()
|> here()
|> ok()
источник

LL

Lama Lover in pro.elixir
Есть уже OkJose но он какой-то жуткий с тонной бесполезного функционала
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Он в эрланге читается лучше, чем в эликсире, но все еще нет. Потому что он добавляет когнитивную нагрузку вида “хм, а что этот макрос делает? Отлистаю ка я пожалуй в define секцию, чтобы удостовериться в том, что делает этот макрос и не делает ли он что-то еще кроме заворачивания в тупл”. И это для тех кто знает.
А для тех кто не знает - “бля, что за херня, иду смотреть”

А теперь представим pull request, в котором есть изменение в строчке с gen_server:call и нету изменений в define секции. GitHub тебе даже ее не покажет, и придется открывать отдельно файл во время code review чтобы посмотреть что там вообще происходит.
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Он в эрланге читается лучше, чем в эликсире, но все еще нет. Потому что он добавляет когнитивную нагрузку вида “хм, а что этот макрос делает? Отлистаю ка я пожалуй в define секцию, чтобы удостовериться в том, что делает этот макрос и не делает ли он что-то еще кроме заворачивания в тупл”. И это для тех кто знает.
А для тех кто не знает - “бля, что за херня, иду смотреть”

А теперь представим pull request, в котором есть изменение в строчке с gen_server:call и нету изменений в define секции. GitHub тебе даже ее не покажет, и придется открывать отдельно файл во время code review чтобы посмотреть что там вообще происходит.
Аргумент про PR какой-то странный, если честно. Так можно сказать про банальный вызов функции
источник

LL

Lama Lover in pro.elixir
А define в erlang это разве не просто препроцессорное что-то в текстовом виде?
источник

DF

Denis Fakhrtdinov in pro.elixir
Серьезно, эликсирщики ругаются на то, что макрос делает что-то волшебное? 🙂
источник

DF

Denis Fakhrtdinov in pro.elixir
Ну камон, вы эликсировые макросы видели вообще?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Lama Lover
А define в erlang это разве не просто препроцессорное что-то в текстовом виде?
да
источник

DF

Denis Fakhrtdinov in pro.elixir
Это же парс_трансформ, который в хвост и в гриву.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Но он вызывается через ?, что хотябы визуально его отличает от функции
источник

DF

Denis Fakhrtdinov in pro.elixir
Именно.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Короче в эрланге это бы выглядело лучше
источник

LL

Lama Lover in pro.elixir
Denis Fakhrtdinov
Серьезно, эликсирщики ругаются на то, что макрос делает что-то волшебное? 🙂
В эликсире не пишут макросы, в этом соль.
Если в эликсире пишут defmacro, то это скорее всего будет отдельный DSL
Всякие defmacrop и другие непонятные одиночные макросы не проходят никакие нормальные ревью
источник

M

Max in pro.elixir
Если смотреть на разницу между
{:ok, res}
и
|> ok()
, то она в одну пустую строку и несколько символов. При том что
{:ok, res}
 однозначно понятно. Имхо, несколько лишних символов того стоят.
источник