On 10.08.2011 21:11, bearophile wrote:
Dmitry Olshansky:

Honestly I can't get why you are so nervous about code style anyway, you
seem to bring this up way to often.
I bring it often because many D programmers seem half blind to this problem. I 
am not willing to go to the extremes Go language goes to solve this problem, 
but I'd like more recognition of this problem in D programmers. A bit more 
common style is quite helpful to create an ecology of D programmers that share 
single modules. I guess D programmers are used to C/C++ languages, where there 
are not modules and where programs are usually made of many files. So they 
don't see why sharing single modules in the pool is so useful.


About spaces personally I dislike eating extra vertical space for
"clarity", curly braces on it's own line is already way too much.
Think about reading a book without the half lines between paragraphs. In code 
it's the same. Some empty lines are good to improve readability of the code. 
Curly braces are not always present, sometimes a paragraphs ends before or 
after or right on a curly brace.

Braces *are* paragraphs of code, with proper indention it's more then enough to fell the structure. If I really need to stop in the middle function, it's to explain something, then a single line of comment instead of meaningless empty line (which leaves reader clueless as to why) is good enough. Except that I'm not opposed to spaces at global scope.


Have to respectfully disagree on this, don't try to nail everything on
contracts.
Contracts don't replace unittests, they complement each other.

unittest != assert, though the former do contain asserts.
They are nice but have little value over plain assert
_unless_ we are talking about classes and _inheritance_, which isn't the
case here.
It's easy to forget to test the output of a function, the "out" contracts help 
here. In structs the invariant helps you avoid forgetting to call manually a sanity test 
function every time you come in and out of a method.


And there are lots of asserts here, but much more of input is
enforced since it's totally expected to supply wrong pattern (or have an
outside  user to type in the pattern).
The idea is to replace those enforces with asserts, and allow user programs to 
import Phobos stuff that still contain asserts (from a secondary Phobos lib). 
Enforces are for certain kinds of user code, I don't think they are fit in 
Phobos.


No gonna work, file I/O is certainly in Phobos, as are network sockets, etc. You can't assert that something external won't fail. While you'd normally assert on your local logical invariants. As for other things I thought e.g. ranges are already hooked on asserts, as much as other templates. If you have a list of modules where you find the lack of compiled in contracts/asserts unbearable, do tell.

I hate being drugged in these discussions, but just can't resist.

--
Dmitry Olshansky

Reply via email to