[phobos] Fwd: [Issue 4025] New: Making network with the std.stdio.File interface

Andrei Alexandrescu andrei at erdani.com
Thu Apr 8 13:29:53 PDT 2010


On 04/08/2010 03:14 PM, Adam D. Ruppe wrote:
> On Thu, Apr 08, 2010 at 03:55:43PM -0400, Adam D. Ruppe wrote:
>> alias FileImpl!(FILE*) File;
>
> Problem with this: outside functions can't just take a File and expect it to
> work. It isn't a deal breaker, since these functions could be changed to simple
> templates, but it doesn't seem ideal.

I was about to write that. We'd be forcing client code to be templated. 
This is a hindrance that would need substantial benefit to justify it.

> Files based on different implementations being different types seems like a good
> idea, since fclose() won't work on a range (for example), so assigning them to
> each other won't work.

Let's not forget that File isn't a range. Let's call it a "stream 
handle" that can _offer_ a number of ranges with various capabilities 
(byLine, byDchar, byWchar, byChar, byChunk). I envision how we could add 
ranges such as byPacket (variable-length packets returned as they come 
off the wire) and byWhateverAbstractionIsNeededByZip.

> I guess it either has to be an interface and classes, or used as templates,
> to make this idea work.

In order to ensure refcounting and timely closing, File needs to be an 
object. It could use the pimpl idiom inside in conjunction with a class 
hierarchy.


Andrei


More information about the phobos mailing list