Learning D Part 2: Random Little Things I Like
D is better than C++ in many ways. Here are a couple examples that I have encountered so far.
Let’s start with the scope keyword:
void main() { OSInterface.Load(); scope(exit) OSInterface.Quit(); //... }
What this means is “at the end of the current scope, run OSInterface.Quit();. Meaning I can put the call to freeing resources right next to the line where I allocate it. There is also scope(failure) which only runs the when there is an exception, and scope(success) which only runs when the scope exits normally. This is a much better solution than try {} catch {} finally {}.
Another cool thing is lazy evaluation, for example in the function std.exception.enforce, which has this signature:
T enforce(T)(T value, lazy const(char)[] msg = null, string file = __FILE__, size_t line = __LINE__)