On Monday, 15 December 2014 at 06:12:05 UTC, Walter Bright wrote:
On 12/14/2014 7:41 PM, Dicebot wrote:
Being forced to duplicate every single function in two flavors to actually make
scope system usable? This is as much critical as it can be.

C++ seems to do fine without it for const. It's a convenience feature.


It's more than that. It has the potential (well, could have) to be used for type erasure, which is a useful and worthwhile concept by itself.

I know and this is why I am leaning toward it being qualifier despite all
related issues.

That would be a truly massive change to D, and I'm not at all sure it would be worth it. We've (i.e. Kenji) have been fixing bugs with inout for years, and idea that had seemed straightforward.

To be honest, I think one reason for those bugs is the awkward implementation. I had a look at mtype.c to see how difficult it would be to add another type modifier. It's no fun - the current implementation requires a dozen groups of helper functions to be written for every possible combination of type modifiers. Therefore there are helpers like `makeConst`, `makeImmutable`, `makeShared`, `makeSharedConst`, `makeWild` (this is `inout`), `makeWildConst`, `makeSharedWild`, `makeSharedWildConst`, and `makeMutable`. There are also some monster switch statements in the same fashion.

No wonder this is error prone. I suspect that with a cleaner implementation most of these problems will go away.

Reply via email to