Best practices

JS js.mdnq at gmail.com
Tue Aug 27 15:24:20 PDT 2013


On Tuesday, 27 August 2013 at 21:30:53 UTC, H. S. Teoh wrote:
> On Tue, Aug 27, 2013 at 10:59:40PM +0200, JS wrote:
>> There seems to be a lot of stuff D can do but no best 
>> practices for
>> optimal code(performance or safety).
>> 
>> Someone should write a book about it!
>
> I think we're aware of that. :) The problem is, nobody has 
> stepped up to
> the plate to far.
>
> As a general rule, though, I'd say that for the most part, 
> Phobos code
> represents the current D best practices (though I do have to 
> qualify my
> statement that *older* Phobos code may not necessarily meet this
> criterion). Or, at the very least, it serves as a pretty good 
> example of
> what typical D code should look like.
>
> Now, Phobos is still far from perfect, so others may disagree 
> with my
> suggestion that Phobos code is exemplary D code. I *will* say, 
> however,
> that reading Phobos source code has improved my own D coding 
> style by
> leaps and bounds. It's a rather enlightening experience, and 
> highly
> recommended if you want to master D.
>
> And I keep repeating myself, but reading Phobos source code is 
> actually
> far less frightening than it sounds.  Standard libraries' 
> source code in
> many programming languages have a reputation for being obscure 
> and
> arcane, and not representative of "normal" code in that 
> language, but
> Phobos is a shining counterexample. It is surprisingly pleasant 
> to read,
> and very much how regular D code should look like (except for a 
> few dark
> corners that, hopefully, will be cleaned up eventually).
>
>

The only thing I can say about this is that it would be a lot of 
wasted time for those that just want to start programming in D 
but not use old C thinking. I book that distills a lot of the 
techniques and styles would be better. The only ones can write 
such a book are those that write the phobos code then... I'm sure 
it is a small set of people. Do we have to designate a hitter? 
Kenji seems to be a good candidate!?!?!?!



>> e.g., The scope(this) thread... is that something I should 
>> start
>> doing because it is much safer or what?
>
> scope(this) isn't implemented yet, only proposed. :)
>
> Even if it ultimately is rejected, I hope that at least it 
> would have
> helped more people know about the potential pitfalls in object
> creation/destruction. Like floating point arithmetic, it's a 
> lot more
> tricky than it may appear at first glance, and maybe I'll be 
> bold and
> say that most existing code is actually incorrect in this area, 
> it's
> just that the problems don't surface that often.



I saw in that thread the use of scope(failure) in the constructor 
and using delegates handle failures.  I didn't really read the 
thread but saw this when glossing over it and wondered if this 
was the correct way to construct objects or not.


> (Another potential landmine in D is transient ranges... but 
> I'll refrain
> from going there today. :-P)
>
>
>> A book with all the goodies inside it would make life easier 
>> and get
>> people off on the right foot instead of having to learn the 
>> hard
>> way(it's bad enough with all the weird bugs in D already).
>
> I think part of the problem is that D is still changing -- not 
> as
> rapidly as before, as we're trying to stabilize it, but 
> nevertheless
> still changing -- so what constitutes as "best practice" today 
> may be
> regarded as "don't do this" tomorrow.
>



An online book that could be modified easily could be used. 
Something like github for books where people could contribute 
would work nicely.

> One example of this is the recent implementation of templated 
> manifest
> constants. What *used* to be recommended practice is to write:
>
> 	template hasLength(T) {
> 		enum hasLength = is(typeof(T.init.length)) &&
> 				is(T.init.length : size_t);
> 	}
>
> But now, a new, nicer syntax is recommended:
>
> 	enum hasLength(T) = is(typeof(T.init.length)) &&
> 				is(T.init.length : size_t);
>
> So if you were to ask what was "best practice" in 2.063.2, I'd 
> recommend
> the first form above. But once 2.064 is out, it would be the 
> second
> form.
>

Such an "online book" could deal with versioning issues quite 
nicely. If a specialized book writing site isn't available then 
I'm sure a wiki would work.


More information about the Digitalmars-d mailing list