Pull to refresh

Comments 9

Хорошая идея и реализация. Ещё бы это подружить со стремлением С++ к диапазонам https://ericniebler.github.io/std/wg21/D4128.html
То есть ваш список это же перемешанные в кучу данные и ленивые генераторы. Их можно более менее вписать в ленивые диапазоны, которые не владеют данными, если отделить хранение в обычный std::list/vector/set/… .
Спасибо, за хорошую оценку и идею относительно диапазонов.

То есть ваш список это же перемешанные в кучу данные и ленивые генераторы.

Да, можно и так сказать. То, что я написал можно переписать как адаптор к некоторой коллекции. Я посмотрю, что из себя представляют диапазоны. Возможно, получится развить идею.
Очень рекомендую посмотреть диапазоны в D. В C++ слишком много синтаксического шума, за которым идею не так просто разглядеть. Кроме того для D гораздо больше документации, статей и примеров из реальной жизни. Для начала рекомендую http://www.tutorialspoint.com/d_programming/d_programming_ranges.htm
а так же примеры отсюда: http://dlang.org/phobos/std_range.html и отсюда: http://dlang.org/phobos/std_algorithm_iteration.html
Собственно, Эрик и пытается затащить Ranges непосредственно в C++, чтобы стало удобнее. Вот его выступление с C++ Siberia, где он рассказывает об идее диапазонов, ленивой генерации, и предложении для стандартной библиотеки: http://meetingcpp.ru/?page_id=795
Да, кстати, там в одном из слайдов там упомянута статья о диапазонах в D: http://wiki.dlang.org/Component_programming_with_ranges
UFO just landed and posted this here
А вот, кстати, рискую так же отхватить, но… стойте!..

Соглашусь с тем, что С++ становится костылём, если пытаться копировать в нём чисто функциональные фишки. На мой взгляд, это так же, как писать игры на lisp — можно и даже полезно как языковое упражнение… но язык для этого не предназначен и для реальных задач лучше использовать технологии, привычно играющие в соответствующей предметной области (та же скала, например)… Ну, или нужно приводить весьма веские аргументы (кроме "просто прикольно") для обоснования использования конкретного языка в конкретном множестве задач.

… всё, закончил. Теперь можете бить.

П.С.: Кстати, сама статья прикольная и интерфейс класса вышел изящный. Автор молодец — но с учётом сказанного выше.
Да не за что вас бить-то. Функциональная парадигма поддерживается частично в С++, но она не основная и не единственная, поэтому логично что он проиграет чисто функциональному языку в изяществе кода.
boost::function_input_iterator не контейнер, а ленивый список — контейнер. Т.е. вычисленные значения остаются в нем и к ним можно обращаться без повторного вычисления. А так идеи похожи.
Sign up to leave a comment.

Articles