Unk*_*own 47 c++ iterator language-design
在今天的Boost图书馆会议上,"现代C++设计"和Loki C++库的作者Andrei Alexandrescu发表了题为"Iterators Must Go"(视频,幻灯片)的演讲,讲述了为什么迭代器不好,他有一个更好的解决方案.
我试着阅读演示幻灯片,但我无法从中得到很多.
Kon*_*lph 40
首先,回答你的问题:
Andrei在这里做出的重大贡献就是说:完全放弃迭代器的概念,看范围不仅仅是一个方便的包装器,而是一个核心结构.其他语言已经做到了这一点(Andrei的大部分概念只是回应.NET的LINQ或Python的迭代器),但它们都只提供输出范围.Andrei认为不同类型的范围,很像传统的迭代器类别.
从这个角度来看,奇怪的是他开始嘲笑这些迭代器类别的任意性.
我也认为他的例子是关闭的,特别是他的文件复制:是的,迭代器变体是对1975年代码的巨大改进.它将具有复杂中断条件的循环减少到一个语句.他在这里真正遇到的问题只是语法.好吧,对不起:我们在这里谈论C++ - 当然语法很难看.是的,这里使用范围是一种改进 - 但只是语法上的.
我也认为安德烈的find
实施已经完成.他真正定义的是DropUntil
LINQ 的操作(命名很难!).该find
操作应该真正返回一个或零个元素(或迭代器!).这里回避迭代器在我看来没有帮助,因为我们可能想直接修改值而不是复制它.在这里返回单元素范围只会增加开销而没有任何好处.这样做Andrei的方式很糟糕,因为这个方法的名称是错误的和误导性的.
也就是说,我几乎在所有方面都基本同意安德烈.迭代器虽然是来自计算机科学的宠物概念,但肯定是一个很大的语法负担,许多范围(特别是无限生成器)可以(并且应该)在没有它们的情况下方便地实现.
我同意他的观点,即迭代器大多不如范围,而且我不知道是否会选择“更好的东西”。
正如往常一样,“好人是最好的人的敌人”在这里发挥着重要作用。迭代器很有用并且根深蒂固,因此很难知道像范围这样更好的东西是否可以在合理的时间内取代它们。
归档时间: |
|
查看次数: |
11329 次 |
最近记录: |