On 30-nov-10, at 22:24, Steven Schveighoffer wrote:

On Tue, 30 Nov 2010 15:47:22 -0500, Andrei Alexandrescu <seewebsiteforem...@erdani.org > wrote:

On 11/30/10 12:38 PM, Steven Schveighoffer wrote:

No, that's not what I'm saying. Creating a language-based tail-const
solution *unifies* all references, including any smart references you can create. I can say tail-const anything and it always means the same thing. It's another tool to allow creating of smart references. Without this, we have to special case tail-const in all smart reference types.
If anything Rebindable is a special case smart reference, it only
addresses class tail-const. The language solution addresses general
tail-const. E.g. how does Rebindable address tail-const ranges?

I see it 100% opposite from what you are saying, a library solution
looks to me like "look! we don't have to change the language to add
language features, all you need is this template that adds 10k of bloat to your exe! And why do you need to pass them as parameters, just create
a new local variable? And why do you need it to work with *all*
reference types, there's other syntax for that!" All for the sake of not
changing the language, which I think is the more direct and complete
solution. I don't really understand the resistance.

Understanding the "resistance" is very simple. Right now a lot of current readers cheerily ignore this thread. Also a lot of potential users couldn't care any less. Once the feature will be in the language, it will affect them all.

It affects them all as much as Rebindable affects them all. Either way, it's something new they have to learn, whether it's a language feature or a library feature. This argument makes no sense.

Another way to look at it -- whichever solution is used is really going to affect only library writers, not library users. Whether the user writes:

@tail const(C);

or

Rebindable!(const(C))

or something else is really irrelevant to them, what's relevant is what hoops do I as a library writer have to jump through to get this damned thing to work seamlessly.

I mostly agree with Steve (I just made it though the thread), I also find tail const very useful. In fact I independently wrote a related post about tail const (but with a different syntax). The fact that tail const can be reasonably extended to any type, and still guarantees purity shows its usefulness. mostly it can be seen as a shortcut to declare a special kind of constness, only for classes one can express something with tail const that cannot be directly expressed with const()



Reply via email to