gpt4 book ai didi

optimization - 在 Erlang 中是否优化了别名函数

转载 作者:行者123 更新时间:2023-12-03 16:24:14 25 4
gpt4 key购买 nike

假设我有一个从模块导出的函数,但模块多次使用该函数。

所以我写了一个别名,因为我在编码时很懒。

-export([get_toolkit/0]).

get_toolkit() ->
... code ... code ...
... code ... code ...
... code ... code ...
{ok, Thing}.

tk() -> get_toolkit().

编译器是否优化别名?

谢谢

最佳答案

我认为这将花费您一次间接费用。我这么说是因为我拿了这个代码

-module(testit).
-export([get_toolkit/0, long/0, short/0]).

get_toolkit() ->
_ = lists:seq(1,100),
{ok, thing}.

tk() ->
get_toolkit().

long() ->
get_toolkit(),
{ok, thing2}.

short() ->
tk(),
{ok, thing3}.

并通过 erlc -S testit.erl 生成 ASM,这给了我

SNIP

{function, tk, 0, 4}.
{label,3}.
{line,[{location,"testit.erl",8}]}.
{func_info,{atom,testit},{atom,tk},0}.
{label,4}.
{call_only,0,{f,2}}.


{function, long, 0, 6}.
{label,5}.
{line,[{location,"testit.erl",11}]}.
{func_info,{atom,testit},{atom,long},0}.
{label,6}.
{allocate,0,0}.
{line,[{location,"testit.erl",12}]}.
{call,0,{f,2}}.
{move,{literal,{ok,thing2}},{x,0}}.
{deallocate,0}.
return.


{function, short, 0, 8}.
{label,7}.
{line,[{location,"testit.erl",15}]}.
{func_info,{atom,testit},{atom,short},0}.
{label,8}.
{allocate,0,0}.
{line,[{location,"testit.erl",16}]}.
{call,0,{f,4}}.
{move,{literal,{ok,thing3}},{x,0}}.
{deallocate,0}.
return.
  • snip-it 中列出的第一个函数是“速记”函数,tk/0。
  • 第二个是调用get_toolkit/0的长函数,
  • 第三个是使用 tk/0 简写的简写函数

ASM 显示最后一个函数(使用 tk/0 的函数)调用 tk/0 ({call, 0, {f, 4}}),后者又调用 get_toolkit/0 ({call, 0, { f,2}})。使用 get_toolkit/0 的函数直接调用 get_toolkit/0 ({call, 0, {f,2}})。

所以,我认为没有应用优化。

另外,我做了一些时间测试,似乎支持这个假设;)

关于optimization - 在 Erlang 中是否优化了别名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14759380/

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