What are the unused but useful feature you know in D?

Random D user via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 26 11:47:18 PDT 2017


On Monday, 26 June 2017 at 14:17:26 UTC, Adam D. Ruppe wrote:
> 1) Add the opposite attributes: `impure`, `throws`, `@gc`, etc.
> 2) Add the module version thing that changes defaults on request
> 3) imagine more potential going forward

I dislike doubling the keywords by having a 'not' case for each.
I'd rather have a systematic way of adding/removing attributes 
and udas.

Something like:
@gc
@!gc  (previously @nogc, compiler could even rewrite @nogc into 
@!gc for transition)

---

Anyway, I think we could just have a compile time switch for 
defaults.
Since some projects want to have pure, @safe, immutable by 
default, but others want to have @system @nogc. And no one wants 
write attributes more than they have to.

For example, I kind of like the current defaults since I like 
flexibility/changeability/editability of code. Because that makes 
coding fun which in turn usually means better code, features and 
productivity. Strictness is just a kind of salt that can be 
sprinkled on code in few difficult or dangerous cases.

Also I think @safe is a little bit broken (because of @trusted 
and even the very pros (d-devs) seem to get @trusted wrong on a 
regular basis (at least that's my perception)). Just bite the 
bullet and use Rust if you want to be actually safe.

I'm not a huge fan of immutable/const system either as it's kind 
of difficult to use and low benefits. It often leads into 
backtracking and changing your code all over the place (small 
change becomes an avalanche), because you found out in the last 
leaf function of your subsystem, that your design can't actually 
be immutable (basically, you forgot or couldn't imagine that 
elusive corner case no. 99).
The good thing is that immutable/const is actually strict and 
checkable. No holes like in @safe.

So if this change would happen, I would probably start all of my 
d files with
impure:
@system:
(@nogc:) // depending on my needs, I actually haven't had big 
issues with the gc
(nothrow:)
...

Which reminds me that it would be nice to group attributes as 
well.
Something like this:
alias @apiStrict = @safe immutable pure

int foo() @apiStrict
{
   return 1;
}


More information about the Digitalmars-d mailing list