gpt4 book ai didi

elixir - 类型规范对生成的代码有影响吗?

转载 作者:行者123 更新时间:2023-12-01 15:17:18 26 4
gpt4 key购买 nike

我正在根据 99 题 list 做一些练习。对于 P01 的目的是找到列表的最后一个元素,我的实现几乎总是优于 List.last/1 而相同。差异大约为 20%,但执行之间存在相当多的差异(有时超过 100%)。测试是在新启动的 VM 上完成的,函数在一百万个元素的列表中被称为 10、100 和 1000。

这是我的实现:

def p01([]), do: nil
def p01([h]), do: h
def p01([_ | r]), do: p01(r)

仔细查看 List.last/1 源代码会发现 2 个差异

  1. 编译器指令 @compile :inline_list_funcs 我理解它是一个仅适用于当前模块的 Erlang 指令。我不确定它是否对我的短代码有真正的影响
  2. 类型说明 @spec last([elem])::nil | elem 当 elem: var

这两个更改使我的实现的执行时间更接近 List.last/1 的执行时间。

问题 1:编译器是否使用 @spec... 以某种方式优化代码?

Q2:附带问题:在我的测试中,erlang 标准库函数 :lists.last/1 总是比 List.last/1。同样,两次运行之间存在一些差异,但差异非常稳定。为什么 List.last/1 不是 Erlang 实现的简单包装器?

最佳答案

我不确定问题 #2,但回复:问题 #1,来自 elixir 文档:“编译器从不使用类型规范来优化或修改代码”,请参阅:https://hexdocs.pm/elixir/typespecs.html

关于elixir - 类型规范对生成的代码有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50313835/

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