Review of Jose Armando Garcia Sancio's std.log

David Gileadi gileadis at NSPMgmail.com
Wed Mar 7 07:46:48 PST 2012


On 3/6/12 5:39 PM, H. S. Teoh wrote:
> I don't like the current state of dlang.org docs either. There is little
> or no intro paragraph to explain what on earth the module is used for or
> why you should bother reading the rest of the page for the next hour or
> so. It also doesn't give any motivating examples (I'm thinking of
> std.range here) why this module is useful.
>
> I think a good intro is a must to good documentation. Include some code
> snippets to show typical usage of the module. How to change common
> settings. Some explanation of why the user might find the module
> helpful. It's OK to duplicate some docs here, within reason. It should
> also be concise without being uninformative.
>
> For example (from std.range):
>
> 	This module defines the notion of range (by the membership tests
> 	isInputRange, isForwardRange, isBidirectionalRange,
> 	isRandomAccessRange), range capability tests (such as hasLength
> 	or hasSlicing), and a few useful range incarnations.
>
> is concise, but not very informative. Why should the user care what a
> range is anyway? No explanation is given. Something like this may be a
> beginning to better documentation:
>
> 	This module defines the notion of a range. Ranges generalize the
> 	concept of arrays, lists, or anything that involves sequential
> 	access. This abstraction enables the same set of algorithms (see
> 	std.algorithm) to be used with a vast variety of different
> 	concrete types. For example, a linear search algorithm such as
> 	std.find works not just for arrays, but for linked-lists, input
> 	files, incoming network data, etc..
>
> 	This module defines several templates (<!--insert list
> 	here-->)for testing whether a given object is a range, and what
> 	kind of range it is.
>
> 	It also lets you construct new ranges out of existing ranges.
> 	For example, retro lets you access a bidirectional range in
> 	reverse, cycle creates a range that is an endless repetition of
> 	the original range. ...
>
> 	...
>
> Basically, you're writing an overview to the module, so highlight its
> main components, give some insight into why it's useful, etc., so that
> the user can make sense of the long list of declarations that follow.
>
> As it stands, std.range's page consists of a giant list of range-related
> declarations that gives no hint to the user as to how they all fit
> together. You basically have to wade through it until it somehow all
> "clicks" together. That is poor documentation. The overview should give
> some general categories of stuff that's found in the module (e.g. range
> tests, constructing new ranges, etc., as I've tried to do above in my
> one-shot attempt to improve std.range's docs). Include some examples of
> really clever stuff that you can do with the help of the module. Such
> examples are usually a very good way to get the user up-to-speed with
> what the module has to offer.

I strongly agree, particularly in the case of ranges which are not a 
familiar concept to many, but also with the general principle.


More information about the Digitalmars-d mailing list