169 похожих чатов

Паттерн матчинг быстрее сравнения?

13 ответов

10 просмотров

Угу

Anastasiya-Dyachenko Автор вопроса
Lama Lover
Угу

скинь где про это почитать

Anastasiya Dyachenko
скинь где про это почитать

https://github.com/devonestes/fast-elixir#map-lookup-vs-pattern-matching-lookup-code

Anastasiya-Dyachenko Автор вопроса
Bogdan
https://github.com/devonestes/fast-elixir#map-look...

это map lookup а не сранивание

Anastasiya Dyachenko
скинь где про это почитать

defmodule X do def cmp(list) do Enum.filter(list, fn x -> if x == [], do: true, else: false end) end def pm(list) do Enum.filter(list, & match?([], &1)) end end n = 10_000 list = [[]] |> Stream.cycle() |> Enum.take(n) |> Enum.zip(1..n) |> Enum.flat_map(fn {a, b} -> [a, b] end) Benchee.run(%{ "pm" => fn -> X.pm(list) end, "cmp" => fn -> X.cmp(list) end }) Name ips average deviation median 99th % pm 1.97 K 508.00 μs ±10.35% 488.60 μs 679.60 μs cmp 1.60 K 626.34 μs ±11.92% 606.18 μs 1151.46 μs Comparison: pm 1.97 K cmp 1.60 K - 1.23x slower +118.34 μs

Lama Lover
defmodule X do def cmp(list) do Enum.filter...

Если убрать if x == [], do: true, else: false и оставить x == [] Результат вот такой Name ips average deviation median 99th % pm 1.97 K 508.16 μs ±10.02% 492.75 μs 693.95 μs cmp 1.57 K 637.88 μs ±15.06% 608.31 μs 1172.37 μs Comparison: pm 1.97 K cmp 1.57 K - 1.26x slower +129.72 μs

Anastasiya-Dyachenko Автор вопроса
Anastasiya-Dyachenko Автор вопроса
Alex Bubnov
а если is_list?

ето бойлерплейт

Anastasiya Dyachenko
ето бойлерплейт

меня интересует не код, а причины различия в производительности

Bogdan
https://github.com/devonestes/fast-elixir#map-look...

Что-то мне не нравится бенчмарк с 5 элементами в мапе. Требую бенчмарк с 10к элементов

Źmićer Rubinštejn
Что-то мне не нравится бенчмарк с 5 элементами в м...

Согласен, тест очень всратый и нерепрезентативный

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта