Purity, @safety, etc., in generic code
Jonathan M Davis
jmdavisProg at gmx.com
Fri Feb 22 22:14:20 PST 2013
On Saturday, February 23, 2013 07:07:51 deadalnix wrote:
> On Friday, 22 February 2013 at 20:32:59 UTC, Jonathan M Davis
>
> wrote:
> > On Friday, February 22, 2013 14:31:55 Steven Schveighoffer
> >
> > wrote:
> >> It is probably rare to have both a const and non-const
> >> overload, that is
> >> true, but it is not up to D to decide what design is best. We
> >> should take
> >> the most flexible approach, and allow designers to come up
> >> with whatever
> >> ideas they like. I don't think there is any significant extra
> >> work
> >> required to support const method overloads in the compiler, in
> >> fact it
> >> would be a more significant change to make that an exception.
> >
> > A prime example of where overloading on const can be useful is
> > caching. You
> > can write a function which caches its result for efficiency
> > purposes, but the
> > const version can't cache, whereas the non-const one can. So,
> > you can do
> > something like
> >
> > auto calculate()
> > {
> >
> > if(_dirty)
> > _cache = _doCalculation();
> > return _cache;
> >
> > }
> >
> > auto calculate() const
> > {
> >
> > if(_dirty)
> > return _doCalculation();
> > return _cache;
> >
> > }
> >
> > If you couldn't overload on const, then that wouldn't be
> > possible. You'd be
> > forced either to forgoe const and make it cache or to make it
> > const and forgoe
> > the caching.
>
> Nothing prevent you from putting the cache outside the object.
Which then makes it so that the function can't be pure. While overloading on
constness may be infrequently needed, we're definitely losing something useful
if we can't do it anymore.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list