Thread overview
Case study on ranges and lazy evaluation
Jul 20, 2015
Matt Kline
Jul 20, 2015
extrawurst
Jul 20, 2015
Adam D. Ruppe
Jul 20, 2015
Matt Kline
Jul 20, 2015
John Colvin
Jul 20, 2015
John Colvin
Jul 21, 2015
Joakim
Jul 21, 2015
Kagamin
Jul 21, 2015
Matt Kline
July 20, 2015
With the general push to make more of Phobos use lazily evaluated ranges, Walter's DConf talk, and even C++ moving towards ranges (https://www.youtube.com/watch?v=uXBcwcF3ln4), I wrote a small article with a case study examining their merits.

http://bitbashing.io/be-lazy-use-ranges.html

The target audience is largely those unfamiliar with ranges (and to a certain extent, D), but I welcome any and all feedback.
July 20, 2015
On Monday, 20 July 2015 at 17:26:31 UTC, Matt Kline wrote:
> With the general push to make more of Phobos use lazily evaluated ranges, Walter's DConf talk, and even C++ moving towards ranges (https://www.youtube.com/watch?v=uXBcwcF3ln4), I wrote a small article with a case study examining their merits.
>
> http://bitbashing.io/be-lazy-use-ranges.html
>
> The target audience is largely those unfamiliar with ranges (and to a certain extent, D), but I welcome any and all feedback.

https://www.reddit.com/r/programming/comments/3dyr79/be_lazy_use_ranges/
July 20, 2015
Quick, what does this loop in this function do?

void PanelBar::RepositionExpandedPanels(Panel* fixed_panel)


I'm willing to guess it repositions the expanded panels.... named functions are the best abstraction.
July 20, 2015
On Monday, 20 July 2015 at 18:17:18 UTC, Adam D. Ruppe wrote:
> Quick, what does this loop in this function do?
>
> void PanelBar::RepositionExpandedPanels(Panel* fixed_panel)
>
>
> I'm willing to guess it repositions the expanded panels.... named functions are the best abstraction.

Well, yes, but crap code with a good name is still crap code. If you look at the _how_, it rapidly falls away to insanity. Sean Parent's talk discusses how he was able to turn this function, which was over 100 lines of nasty loops, into two std::algorithm calls.
July 20, 2015
On Monday, 20 July 2015 at 18:17:18 UTC, Adam D. Ruppe wrote:
> Quick, what does this loop in this function do?
>
> void PanelBar::RepositionExpandedPanels(Panel* fixed_panel)
>
>
> I'm willing to guess it repositions the expanded panels.... named functions are the best abstraction.

That's great for an API user, but it's not as massively impactful for actually getting the code right, changing the code, finding the bugs in the code, etc... where you need to actually need to understand the logic.
July 20, 2015
On Monday, 20 July 2015 at 19:44:01 UTC, John Colvin wrote:
> On Monday, 20 July 2015 at 18:17:18 UTC, Adam D. Ruppe wrote:
>> Quick, what does this loop in this function do?
>>
>> void PanelBar::RepositionExpandedPanels(Panel* fixed_panel)
>>
>>
>> I'm willing to guess it repositions the expanded panels.... named functions are the best abstraction.
>
> That's great for an API user, but it's not as massively impactful for actually getting the code right, changing the code, finding the bugs in the code, etc... where you need to actually need to understand the logic.

P.s. which is not to say that sensibly breaking code in to functions with good names doesn't help with the above, but just that it doesn't cover all of the same problems that e.g. ranges/algorithms try to address.
July 21, 2015
On Monday, 20 July 2015 at 17:26:31 UTC, Matt Kline wrote:
> With the general push to make more of Phobos use lazily evaluated ranges, Walter's DConf talk, and even C++ moving towards ranges (https://www.youtube.com/watch?v=uXBcwcF3ln4), I wrote a small article with a case study examining their merits.
>
> http://bitbashing.io/be-lazy-use-ranges.html
>
> The target audience is largely those unfamiliar with ranges (and to a certain extent, D), but I welcome any and all feedback.

Nice, well-written piece, says something about reddit that it's not popular on there.
July 21, 2015
On Monday, 20 July 2015 at 17:26:31 UTC, Matt Kline wrote:
> http://bitbashing.io/be-lazy-use-ranges.html

You assign off_t to size_t, won't compile on 32-bit system. You're safe to use simple `long` for file sizes and offsets.
July 21, 2015
On Tuesday, 21 July 2015 at 14:34:25 UTC, Kagamin wrote:
> You assign off_t to size_t, won't compile on 32-bit system. You're safe to use simple `long` for file sizes and offsets.

Nice catch! I'll clean that up after work.