G G*_*III 5 performance enums stream elixir
这可能听起来像是我要求开始一场火焰战,但是听我说.
在某些语言中,懒惰是昂贵的.例如,在我拥有最新体验的Ruby中,懒惰是缓慢的,因为它是使用光纤实现的,所以它在以下情况下才有吸引力:
否则你肯定想要使用正常的,急切的方法.
我最初的调查表明,Elixir中懒惰的开销要低得多(reddit上的这个帖子支持我),所以似乎没有理由使用Enum而不是Stream来处理Stream可以做的事情.
是否有一些我缺少的东西,因为我认为Enum存在是有原因的并且实现了一些与Stream相同的功能.如果有的话,我可以在使用Stream时使用Enum而不是Stream?
对于简短的列表,Stream将比简单地使用Enum慢,但没有明确的规则,没有准确的基准测试你正在做什么.Enum中也存在一些函数,但在Stream中没有相应的函数.(例如,Enum.reverse)
你需要两者的真正原因是Stream只是一个功能组合.需要结果而不是副作用的每个管道都需要以Enum结束才能运行管道.
它们齐头并进,Stream无法独自站立.Stream正在做的主要是为您提供非常方便的抽象,以创建非常复杂的reduce函数.
Stream中的方法实际上创建了一个转换数据的"配方列表",而Enum中的方法实际上解决了这些转换.因此,即使其他所有内容都是Stream,您最终也必须使用Enum函数来解析数据转换.
还有一些概念,即Reduce,在Stream中没有实际意义,你必须使用Enum.
至于性能,如果您正在执行一系列转换,可能是无限的数据流,或者您正在读取文件,请使用Stream.如果您只对有限可枚举进行一次转换,或者需要解析流,请使用Enum.
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |