在最新版本的Elixir中,Access不再作为协议实现,而是作为一种行为实现。从我收集的内容来看,这种变化是出于开发模式中的性能考虑所致。
现在,看看实现,我想知道这是如何在内部工作的,以及为什么选择这个实现。我们可以看到here,Access通过底层地图的“__struct__”键调度到结构的模块。 AFAICS,这大致类似于OOP风格的多态。关于这个的一些问题:
答案 0 :(得分:1)
正如您已经提到的,Access
的实现已更改为使用“行为”而不是“协议”。原因是性能。
尽管协议在根据数据类型进行分配时为您带来了很多繁重的工作,但由于实现方式(合并),它们仍将Access
never be fast enough取代,
因此,尽管在需要将某些功能绑定到数据结构而不是模块时应始终使用协议,但是Access
是特例。
由于
Access
协议在开发和测试模式下依赖于代码服务器(未应用协议合并时),因此我们听说由于该代码服务器成为瓶颈,该系统在性能上遭受了极大的困扰。多个过程。之所以会发生这种情况,是因为
Access
协议最终被调用了数千次,并且我们没有太多改进措施(与内联大多数列表情况的Enumerable协议相反)。 / p>
进一步阅读: