Idiomatic D =========== The D community is relatively young and small, so there is not that much experience about best practices. Nevertheless, due to runtime and standard library certain characteristics can be considered idiomatic. Constness --------- D provides ``const`` and ``immutable`` keywords. Aim for const input and immutable output. .. seealso:: `Const FAQ `_ Purity ------ Try to make your functions ``pure`` and ``nothrow`` and ``@safe``. Ranges ------ Instead of iterators, D promotes ranges, which can be described as a pair of iterators. Ranges capture the concept of sequential access, which is available for arrays, lists, files, and sockets. There are various kinds of ranges, depending, for example, on whether random access is possible. For an example, consider the expression ``sort(chain(a,b,c))``, where ``sort`` and ``chain`` are ordinary functions from the standard library. Like the name suggests, ``sort`` is the sorting function and ``chain`` wraps multiples range into one. If ``a``, ``b``, and ``c`` are random access arrays, then ``sort`` can perform in-place over three distinct arrays. This tutorial will not explore ranges deeper, because the topic is quite big. Instead, there are a few links. I think ranges are really cool, and well deserving of a book treatment. Someone should write it. – `Andrei Alexandrescu `_ .. seealso:: `std.range `_, `On Iteration `_, `Component Programming with Ranges `_, `Ranges by Ali Çehreli `_ Compile Time Function Evaluation -------------------------------- Since D allows to call certain D code at compile time, a library write should enable her functions for compile time evaluation. This often means to write code according to the functional programming paradigm. Scope Guards ------------