Lars Kyllingstad wrote:
Andrei Alexandrescu wrote:
Hi everybody,


I just committed all of Phobos into svn on dsource.org. That is not an
official release and has known and unknown bugs, limitations, and
rhinodemons. I expect some ripples before we stabilize, but when we will
we'll stabilize at a higher potential.

Some corrections/suggestions to std.range, if you are ready for such yet:

Thanks!

From the documentation it seems that the function series() is meant to be called recurrence(). (Personally I think recursiveSequence() is more fitting.)

Fixed. (I'm trying to stay with one-word names when possible.)

The function sequence() is missing from the documentation, only struct Sequence is listed. Guess there should be a ///ditto in there.

Oops... fixed.

I think isInfinite!() should be called isInfiniteRange!(). The current name is, in my opinion, too general.

I'm undecided about this (and similar cases). isInfinite sits inside std.range, so std.range.isInfinite is clear and std.range.isInfiniteRange feels redundant. On the other hand, I don't want to use too common symbols because then the user will be forced to prefix them whenever they clash.

I fixed everything and checked in. Speaking of which, I'd be glad if interested people could take a look at std.file and compare it against the old:

http://dsource.org/projects/phobos/browser/trunk/phobos/std/file.d

Previously many phobos modules, e.g. std.file, looked like this:

version(Windows)
{
    ... big chunk ...
}
version(Posix)
{
    ... big chunk ...
}

The advantage of this approach is that it keeps platform-specific code together. The disadvantage is that it encourages code duplication. I found that about 25% of the functions inside std.file actually were not platform dependent; they essentially were duplicated verbatim.

So I suggest we change this to per-declaration granularity where it makes sense:

/**
Doc for read...
*/

version(Windows) void[] read(in char[] filename, void[] data) { ... }

version(Posix) void[] read(in char[] filename, void[] data) { ... }

The current std.file implements this alternative factoring and initial experience seems to suggest it works fine. Also, the code got smaller by 18%. This must also because I got rid of all goto's :o).

By the way, here's a neat trick I think may be used in other situations as well: factoring some constant function arguments together.

version(Windows) void[] read(in char[] name)
{
    alias TypeTuple!(GENERIC_READ,
            FILE_SHARE_READ, (SECURITY_ATTRIBUTES*).init, OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
            HANDLE.init)
        defaults;
    auto h = useWfuncs
        ? CreateFileW(std.utf.toUTF16z(name), defaults)
        : CreateFileA(toMBSz(name), defaults);
    ...
}

The previous code duplicated all those arguments.


Andrei

Reply via email to