小编Mig*_*ter的帖子

为什么Elixir的Access行为不是协议?

在最新版本的Elixir中,Access不再作为协议实现,而是作为一种行为实现.从我收集的内容来看,这种变化是出于开发模式中的性能考虑.

现在,看一下实现,我想知道这是如何在内部工作的,以及为什么选择这个实现.正如我们在这里看到的,Access通过底层映射的"__struct__"键调度到struct的模块.AFAICS,这大致类似于OOP风格的多态.关于这个的一些问题:

  1. 为什么这会更快?
  2. 与协议相比有哪些缺点?据我所知,它不太可扩展.还有其他吗?
  3. 到目前为止,我只看到像GenServer这样的东西的行为,其中回调模块在初始化时捕获并保存在一个进程中(至少我假设同样多).这里,Access行为从数据中获取回调模块.是否有可能为不是结构的东西实现这种行为?
  4. 当人们对协议给出的额外好处不感兴趣时​​,这种调度是Erlang还是Elixir的常见最佳实践?

elixir

39
推荐指数
1
解决办法
1712
查看次数

标签 统计

elixir ×1