On 11/20/2011 12:30 PM, Jonas Drewsen wrote:
* Containers. (AFAIK noone is working on this. It's tough to get started
because, despite lots of discussion at various times on this forum,
noone seems to really know what they want. Since the containers in
question are well-known, it's much more a design problem than an
implementation problem.)
 >
* Allocators. (I think Phobos desperately needs a segmented stack/region
based allocator and I've written one. I've also tried to define a
generic allocator API, mostly following Andrei's suggestions, but I'll
admit that I didn't really know what I was doing for the general API.
Andrei has suggested that allocators should have real-world testing on
containers before being included in Phobos. Therefore, containers block
allocators and if the same person doesn't write both, there will be a
lot of communication overhead to make sure the designs are in sync.)

I've though about doing some containers myself but have hesitated since
the general opinion seem to be that allocators need to be in place first.

Yeah, this is problematic. In voting against my allocator proposal, Andrei mentioned that he wanted the allocators to be well-tested in the container API first. This means either we have a circular dependency or allocators and containers need to be co-developed. Co-developing them is problematic. If one person does containers and another allocators, the project might be overwhelmed by communication overhead. If the same person does both, then this is asking a pretty lot for a hobby project.

Of course, I hope to graduate in <1 year and will be looking for a job when I do. Any company out there have a strategic interest in D and want to hire me to work full-time on allocators and containers?

* Streams. (Another item where the bottleneck is mostly at the design
level and people not really knowing what they want.)

What does streams provide that could not be provided by ranges?

If I understand correctly, streams _would_ be a flavor of ranges. They would just be ranges that are geared towards being stacked on top of one another specifically for the purpose of I/O. They would typically be design around the vanilla input range (not forward, random access, etc.) or output ranges.

Traditionally, streams would also be class based instead of template based. However, IMHO a good case can be made for template based stream ranges in D because we have std.range.inputRangeObject and std.range.outputRangeObject. This means that you can stack streams using templates, with no virtual function call overhead, and then if you need to respect some binary interface you could just stack an inputRangeObject() or outputRangeObject() on top of all your other crap and only have one virtual call. Example:

auto lines = lineReader(
    gzipUncompresser(
        rawFile("foo.gz")
    )
);

// LineReader!(GzipUncompresser!(RawFile)))
pragma(msg, typeof(lines));

auto objectOriented = inputRangeObject(lines);

// InputRangeObject!(char[])
pragma(msg, typeof(objectOriented));

Reply via email to