Smart pointers instead of GC?
Michel Fortin
michel.fortin at michelf.ca
Tue Feb 4 17:09:47 PST 2014
On 2014-02-04 22:30:40 +0000, Walter Bright <newshound2 at digitalmars.com> said:
> On 2/4/2014 4:23 AM, Michel Fortin wrote:
>> For the rare cases where you actually want both versions to work,
>
> I think you're making a vast assumption that the case is rare.
>
> When I write utility functions, I want them to work on as wide a
> variety of inputs as possible. Otherwise, they are not very useful.
Well, if you think it's needed I won't contradict you. But that does
not bode well for the storage class solution. If you really think it's
needed, then you could just double the '?' to give it a similar meaning
to inout:
Object?? passthrough(Object?? o)
{
// do something here
return o;
}
It looks elegant to me, even if I'm not convinced it is necessary.
>> you can write them twice or use a template (except in a virtual
>> context), and in both cases you keep the efficiency of not checking for
>> null when the argument is not nullable.
>
> That's just what I wish to avoid. Consider adding more pointer types -
> the combinatorics quickly explode. Heck, just have two pointer
> parameters, and you already have 4 cases.
So you are already worried we'll have to add more pointer types? ;-)
Ok, let's have some fun: '#' means unique now. So we can have four
kinds of pointers:
Object o1; // not-nullable & not-unique
Object? o2; // nullable & not-unique
Object# o3; // not-nullable & unique
Object?# o4; // nullable & unique
And like above, double the marker to make it work like inout:
Object??## passthrough(Object??## o)
{
// have some fun here
return o;
}
If you really think more pointer types will be added, then I suggest
the implementation for this in the compiler be generic enough to
support yes/no/maybe states for a couple of flags. Perhaps even
user-defined flags for use by libraries (i.e. Dicebot's
SQLEscapedString, or UnicodeNormalizedNFD, or why not PrimeNumber).
--
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca
More information about the Digitalmars-d
mailing list