On Sunday, 17 April 2016 at 14:30:59 UTC, QAston wrote:
You've got lucky with pure (modulo corner cases) and ctfe, much less lucky with @safe, @trusted, @system, inout, shared, scope, property.
The @safe troika is a good design (except @safe should be the default), the implementation is lacking though. Ideallists want to make @safe strict now, but break code sometimes even without basic workarounds for memory-safe code. Pragmatists want to avoid breakage but make the subset of @safe code wider, making the definition more complex. There seems to be a stalemate.
scope, if implemented for reference types, wouldn't scale well. It should be the default, with __escape meaning scope(false). I think it's an uphill battle arguing for this, but it is crucial to avoiding GC without runtime checks. At least for non-GC code in a general way.
I think @property is OK. I think the controversy at the time was about optional brackets in function calls, which is different.
