Доброго дня!
При обсуждении C++ время от времени возникают споры по поводу STL итераторов, их достоинств, недостатков и альтернатив в виде range (левая и правая границы диапазона в одном флаконе). Небезызвестный Андрей Александреску, который сейчас активно участвует в разработке языка D (второй его версии -- D2, для которой он так же пишет стандартную библиотеку), предложил свой вариант range для языка D:
http://ssli.ee.washington.edu/~aalexand/d/tmp/std_range.html
В анонсе Александреску сказал, что при выработке данных предложений он учитывал, в том числе и достоинства и недостатки Boost.Range.
PS. Решил запостить в форум "С++" т.к., имхо, это хороший показатель того, до какой степени могут быть развиты идеи C++ (STL итераторы и Boost.Range).
PPS. Для реализации этих range в D2 потребуется доработка языка D2 (возврат ссылок), на которые Вальтер Брайт согласился.
Здравствуйте, jazzer, Вы писали:
E>>PPS. Для реализации этих range в D2 потребуется доработка языка D2 (возврат ссылок), на которые Вальтер Брайт согласился.
J>Можешь вот это расшифровать?
Насколько я понимаю
вот здесь
E left();
Returns the leftmost element of the range, which is the rightmost element of the original range.
BUGS:
Should return by reference.
есть проблема с value types. В D есть две разных категории -- reference types (классы) и value types (структуры и примитивные скалярные типы вроде int, float и т.д.). Если E в типе Range является ссылочным типом, то left() возвращает ссылку и возвращаемый объект может быть изменен. А вот если E -- это value type, то возвращается копия и вот этот код:
r.left = n;
не будет изменять значение в исходном контейнере.