gpt4 book ai didi

Erlang:在编译时计算数据结构文字(常量)?

转载 作者:行者123 更新时间:2023-12-02 09:20:00 31 4
gpt4 key购买 nike

这可能是一个天真的问题,我怀疑答案是"is",但我没有运气在这里和其他地方搜索“erlang编译器优化常量”等术语。

无论如何,erlang 编译器是否可以(将)在编译时创建一个常量或文字的数据结构,并使用它而不是创建一遍又一遍创建数据结构的代码?我将提供一个简单的玩具示例。

test() -> sets:from_list([usd, eur, yen, nzd, peso]).

编译器是否可以(将)简单地将集合粘贴在函数的输出处,而不是每次都计算它?

我问的原因是,我想在我正在开发的程序中拥有一个查找表。该表只是可以在编译时计算(至少理论上)的常量。我只想计算该表一次,而不必每次都计算它。我知道我可以通过其他方式做到这一点,例如计算该事物并将其存储在进程字典中(或者可能是 ets 或 mnesia 表)。但我总是从简单开始,对我来说,最简单的解决方案是像上面的玩具示例一样,如果编译器对其进行优化的话。

如果这不起作用,还有其他方法可以实现我想要的吗? (我想我可以研究解析转换,如果它们适用于此,但这比我想要的更复杂?)

这就是刚刚。我使用带有“S”选项的compile:file/2 来生成以下内容。我不是 erlang 汇编专家,但看起来优化没有执行:

{function, test, 0, 5}.
{label,4}.
{func_info,{atom,exchange},{atom,test},0}.
{label,5}.
{move,{literal,[usd,eur,yen,nzd,peso]},{x,0}}.
{call_ext_only,1,{extfunc,sets,from_list,1}}.

最佳答案

不,erlang 编译器不会对 set 所执行的外部模块调用执行部分评估。您可以使用ct_expand著名模块parse_trans来达到这个效果。

关于Erlang:在编译时计算数据结构文字(常量)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180259/

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