Александреску разрабатывает range для D2
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.09.08 06:48
Оценка:
Доброго дня!

При обсуждении 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 (возврат ссылок), на которые Вальтер Брайт согласился.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Александреску разрабатывает range для D2
От: jazzer Россия Skype: enerjazzer
Дата: 09.09.08 06:58
Оценка:
Здравствуйте, eao197, Вы писали:

Спасибо за ссылку.

E>PPS. Для реализации этих range в D2 потребуется доработка языка D2 (возврат ссылок), на которые Вальтер Брайт согласился.


Можешь вот это расшифровать?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Александреску разрабатывает range для D2
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.09.08 07:06
Оценка:
Здравствуйте, 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;

не будет изменять значение в исходном контейнере.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.