Copying a delegate

Jonathan M Davis jmdavisProg at gmx.com
Mon Sep 20 09:27:31 PDT 2010


On Monday, September 20, 2010 04:08:11 Kagamin wrote:
> Jonathan M Davis Wrote:
> > I don't think that there's anything Phobos can do
> > about it. It's a limitation of delegates.
> 
> If the range doesn't support copying, it shouldn't pretend to support it,
> and algorithms relying on copy won't compile.

Except that you don't know what is in a delegate, or it wouldn't be a delegate. 
Many delegates can be reused just fine and thus "copied" because they are 
logically pure. Others can't be. If you have a range based on a delegate, unless 
you know every single function that could be used as the delegate, you have no 
way of knowing whether the delegate is logically pure. And even then, you'd only 
know it because you knew what the functions did; the compiler couldn't enforce 
it.

So, you can have a range which properly supports copying as long as its delegate 
is logically pure, but you can't use the compiler to enforce that the delegate 
be logically pure. There's no way for Phobos to avoid the problem. The only way 
to completely avoid the problem is not to have ranges which are generated with 
delegates, but that would eliminate a lot of useful ranges.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list