gpt4 book ai didi

erlang - 首先放置最可能匹配的功能负责人是否有任何好处?

转载 作者:行者123 更新时间:2023-12-01 22:03:52 25 4
gpt4 key购买 nike

假设我们有多个 function headscase do 模式要匹配。

首先放置“常见情况”“最有可能” 标题会带来任何好处吗?

当我重新排序 ELIXIR 中的 case do 匹配模式时,我看到了时间上的改进,将最常见的模式放在第一位。

我原以为 VM 会优化它,顺序应该无关紧要。

例子:

  for {s, i} <- li do
case :binary.split(s, spliter, [:global]) do
[_, tag, val, _, _] ->
# this pattern occurs over 9/10 times.
# in files with over 100000 rows matching this pattern
# reduced processing time
{:tv, i, tag, val}

[_, "data", _] ->
Process.put(:data_tag, true)
{:tb, i, "data"}

[_, "/data", _] ->
Process.put(:data_tag, false)
{:te, i, "data"}

[_, "/" <> tag, _] ->
if Process.get(:data_tag) do
{nil, i}
else
{:te, i, tag}
end

[_, "?xml" <> _, _] ->
{nil, i}

[_, "!--" <> _, _] ->
{nil, i}

[_, "return" <> _, _] ->
{nil, i}

[_, tag, _] ->
if Process.get(:data_tag) do
{:tv, i, tag, ""}
else
{:tb, i, tag}
end

_ ->
{nil, i}
end
end

最佳答案

除了可读性之外应该没有任何好处。 Elixir 仍然编译成 Erlang 抽象语法树,并且 Erlang 编译器允许自己重新排序子句以尽可能高效。

在旧版本的编译器中,保护子句可能会干扰此功能,因此您可以将所有非保护子句设置在靠近顶部的位置,但对 Erlang 编译器的不断改进使其不太可能优化。

不过,正如您所发现的,可能存在更广泛的分支情况,其中编译器看不到真正明显的改进运行时间的方法(例如,检查同一类型的多个文字),您可能会看到好处.

关于erlang - 首先放置最可能匹配的功能负责人是否有任何好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com