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

Adam D. Ruppe via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 26 07:17:26 PDT 2017


On Monday, 26 June 2017 at 04:31:33 UTC, H. S. Teoh wrote:
> Yes, the wrong defaults were a historical accident.

One that we could fix, even without breaking any code.

Of course, breaking some code to change it would be fairly 
straightforward to fix for authors, and could even be done 
automatically in theory (something like dfix), but there's 
another solution too: opt in once per module, then change things. 
Javascript did this to pretty good success with its "use strict" 
thing.

---
// status quo D
module foo.bar;

@safe void whatever() {}
---

---
// next gen D
module version(3.0) foo.bar; // opt in here
void whatever() {} // now @safe by default
---


The syntax could be whatever, but inside the compiler, when it 
detects that, it switches around the default for the module. 
Being opt in means only maintained files get it, but being single 
point change means it is easy to do.

And since changes like this can easily live side by side with 
other modules, it provides a simple path forward.


So here's how I'd do it:

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


It isn't even hard.


More information about the Digitalmars-d mailing list