Size: a a a

2021 January 08

Е

Евгений in pro.elixir
Но я понял, я-то лично все спекаю, но вдруг придет дебил. Впрочем дебила я уволю нахер :)
источник

Е

Евгений in pro.elixir
Yura Zhivaga
зависит от того, как ты будешь это использовать. Если сделать guard - не надо будет проверять перед вызовом "а список ли это"
В принципе, всегда точно известно список надо проверить или одно значение. На стадии написания кода.
источник

M

Mark in pro.elixir
Suren Kirakosyan
Меня вот только присваивание в acc как-то бесит.
Можно ещё сделать возврат undefined | value() из low level функции, тогда она будет отвечать только за маппинг ошибки, а в top level уже сделать добавление в аккамулятор, тогда при добавление новых ошибок не нужно будет писать вечное ++ acc
источник

Е

Евгений in pro.elixir
В общем match_list делаю, а то в первом случае спека получается слишком общая. И список может вернуть и просто значение, ослабляется контроль
источник

SK

Suren Kirakosyan in pro.elixir
Mark
Можно ещё сделать возврат undefined | value() из low level функции, тогда она будет отвечать только за маппинг ошибки, а в top level уже сделать добавление в аккамулятор, тогда при добавление новых ошибок не нужно будет писать вечное ++ acc
Ну сейчас и так сойдёт.
источник

LL

Lama Lover in pro.elixir
Евгений
В теории компилятор может оптимизировать такое. Даже возможно в рантайме
Компилятор это не будет оптимизировать...
источник

Е

Евгений in pro.elixir
Lama Lover
Компилятор это не будет оптимизировать...
Может beam умеет оптимизировать, если список состоит из одного элемента?
источник

Е

Евгений in pro.elixir
Впрочем пофиг. Неинтересно.
источник

LL

Lama Lover in pro.elixir
Евгений
Может beam умеет оптимизировать, если список состоит из одного элемента?
Нет, не умеет, я проверил
источник

Е

Евгений in pro.elixir
Lama Lover
Нет, не умеет, я проверил
Как? Залез в сырцы Beam?
источник

LL

Lama Lover in pro.elixir
Евгений
Как? Залез в сырцы Beam?
Я давным давно проверял оптимизации конкатенации списков
Я просто написал код, скомпилировал его и посмотрел ассемблер, там было создание списка, а потом конкатенация
источник

Е

Евгений in pro.elixir
Lama Lover
Я давным давно проверял оптимизации конкатенации списков
Я просто написал код, скомпилировал его и посмотрел ассемблер, там было создание списка, а потом конкатенация
Я имел ввиду другое. Ты же посмотрел байт-код верно? А я говорю об оптимизации внутри bif-функции конкатенации.
источник

LL

Lama Lover in pro.elixir
Евгений
Я имел ввиду другое. Ты же посмотрел байт-код верно? А я говорю об оптимизации внутри bif-функции конкатенации.
Я посмотрел байт-код

Какая разница что внутри BIF, если всё равно [x] ++ list медленее чем [x | list] хотя бы из-за создания списка [x]
источник

Е

Евгений in pro.elixir
Lama Lover
Я посмотрел байт-код

Какая разница что внутри BIF, если всё равно [x] ++ list медленее чем [x | list] хотя бы из-за создания списка [x]
Без оптимизации разница может быть огромной.
источник

Е

Евгений in pro.elixir
Впрочем может и не будет. Я не знаю как там устроен список внутри.
источник

Е

Евгений in pro.elixir
В теории действительно не особая разница, долистал до конца первого списка и прицепил второй.
источник

Е

Евгений in pro.elixir
Скорее всего так и есть. Обычные односвязные списки.
источник

LL

Lama Lover in pro.elixir
Евгений
Без оптимизации разница может быть огромной.
Учитывая иммутабельность списков, ассимтотика x ++ y это O(len(y)) в любом случае. Компилятор, конечно, мог бы это оптимизировать, но механизм редукций врятли позволит

В любом случае, это всего лишь догадки и лучше писать [x | y], чем [x] ++ y
источник

Е

Евгений in pro.elixir
Ты прав
источник

Е

Евгений in pro.elixir
Lama Lover
Учитывая иммутабельность списков, ассимтотика x ++ y это O(len(y)) в любом случае. Компилятор, конечно, мог бы это оптимизировать, но механизм редукций врятли позволит

В любом случае, это всего лишь догадки и лучше писать [x | y], чем [x] ++ y
Ну это однозначно.
источник