Size: a a a

2020 December 04

DF

Dmitry Frolov in ErlangRus
А такой вопрос:
x(A) when A =:= 1; A=:=2;..... ->
Будет ли отличаться по скорости от:
x(A) when A =:= 1 orelse A=:=2;..... ->
?
источник

PK

Petr Kozorezov in ErlangRus
Petr Kozorezov
посмотрел
external инструкцию зовут select_val
дальше она разворачивается в internal в зависимости от аргументов
для твоего случая когда аргменты натуральные числа и идут подряд (ну или почти, с небольшими пропусками) генерится jump_on_val которая просто делает jump на нужный вариант
т.е. — да, работает такой вариант максимально оптимально за константное время
а вот в обратную сторону atom -> integer генерится select_val_lin которая уже работает линейно :-\
источник

PK

Petr Kozorezov in ErlangRus
Dmitry Frolov
А такой вопрос:
x(A) when A =:= 1; A=:=2;..... ->
Будет ли отличаться по скорости от:
x(A) when A =:= 1 orelse A=:=2;..... ->
?
неа, они абслютно идентичный код генерят
http://tryerl.seriyps.ru/#id=01b4
источник

DF

Dmitry Frolov in ErlangRus
Нужно проверить на огромных списках, с телефона не очень удобно
источник

DF

Dmitry Frolov in ErlangRus
Ну и с атомами тоже
источник

PK

Petr Kozorezov in ErlangRus
Dmitry Frolov
Нужно проверить на огромных списках, с телефона не очень удобно
при генерации jump_on_val (т.е. для целых чисел) размер списка чисел значения не имеет,
а при gen.select_val (для атомов) генерится либо i_select_val_lins если таблица =< 10, т.е. линейный поиск, либо i_select_val_bins, т.е. бинарный если > 10, сортируются значения при загрузке модуля
как-то так
источник

ML

Maksim Lapshin in ErlangRus
Petr Kozorezov
посмотрел
external инструкцию зовут select_val
дальше она разворачивается в internal в зависимости от аргументов
для твоего случая когда аргменты натуральные числа и идут подряд (ну или почти, с небольшими пропусками) генерится jump_on_val которая просто делает jump на нужный вариант
т.е. — да, работает такой вариант максимально оптимально за константное время
Это в ассемблере?
источник

V

Vasilii Demidenok in ErlangRus
Круто, спасибо за инфу!
источник

PK

Petr Kozorezov in ErlangRus
Maksim Lapshin
Это в ассемблере?
да
источник

PK

Petr Kozorezov in ErlangRus
эрланговом разумеется :)
источник

PK

Petr Kozorezov in ErlangRus
там по факту 2 ассемблера: internal специфичный для верссии vm и external для содержимого бим файлов, но это я думаю и так всем известно :)
источник

PK

Petr Kozorezov in ErlangRus
а ещё для меня открытие, что в
x(<<"a">>) -> 1;
x(<<"b">>) -> 2.

y(a) -> 1;
y(b) -> 2.

x будет работать через jump table (если коды символов близко находятся) за константное время, а y через gen.select_val за линейное либо логарифмическое
источник

ИИ

Иванов Иванов... in ErlangRus
ну было-бы крайне тупо если-бы такой оптимизации небыло
источник

PK

Petr Kozorezov in ErlangRus
т.е. получается, что есть возможность, что матчинг по атомам будет медленнее чем по бинарям😱
источник

PG

Pig Greenest in ErlangRus
бинари сила — атомы могила
источник

ع

عاصم بن حارث... in ErlangRus
Pig Greenest
бинари сила — атомы могила
атомы - круть, а бинари  - жуть :)
источник

SP

Sergey Prokhorov in ErlangRus
https://github.com/seriyps/ecaptcha запилил такую штуку, вдруг кому-то понадобится. Небольшая нифка генерит пиксели, PNG и GIF энкодеры просто на Erlang. Без зависимостей (ImageMagic не нужен)
источник

ع

عاصم بن حارث... in ErlangRus
Sergey Prokhorov
https://github.com/seriyps/ecaptcha запилил такую штуку, вдруг кому-то понадобится. Небольшая нифка генерит пиксели, PNG и GIF энкодеры просто на Erlang. Без зависимостей (ImageMagic не нужен)
🤝 полюбопытствую, спсб.
источник

ML

Maksim Lapshin in ErlangRus
Sergey Prokhorov
https://github.com/seriyps/ecaptcha запилил такую штуку, вдруг кому-то понадобится. Небольшая нифка генерит пиксели, PNG и GIF энкодеры просто на Erlang. Без зависимостей (ImageMagic не нужен)
вау!  Мне аж вспомнилась школа
источник

SP

Sergey Prokhorov in ErlangRus
Maksim Lapshin
вау!  Мне аж вспомнилась школа
Упражнение интересное кстати. После всех этих "распарсить json, сохранить в postgres, вернуть другой json" окунуться в удивительный мир бит-шифтов было очень сложно
источник