Streaming library

Steven Schveighoffer schveiguy at yahoo.com
Thu Oct 14 09:01:44 PDT 2010


On Thu, 14 Oct 2010 09:33:54 -0400, Denis Koroskin <2korden at gmail.com>  
wrote:

> On Thu, 14 Oct 2010 17:24:34 +0400, Steven Schveighoffer  
> <schveiguy at yahoo.com> wrote:
>
>> On Wed, 13 Oct 2010 18:21:16 -0400, bearophile  
>> <bearophileHUGS at lycos.com> wrote:
>>
>>> Andrei:
>>>
>>>> Well casting from void[] is equally awkward isn't it? I'm still
>>>> undecided on which is better.
>>>
>>> See also:
>>> http://d.puremagic.com/issues/show_bug.cgi?id=4572
>>>
>>> Bye,
>>> bearophile
>>
>> That issue is slightly different because std.file.read actually creates  
>> the buffer.  In this cases, the buffer is not created, dup'd,  
>> concatenated, etc. so void[] offers the most flexibility.
>>
>> -Steve
>
> That is also the least safe:
>
> Object[] objects;
> stream.read(objects); // most likely will fill with garbage
>
> writeln(objects[0]); // access violation
>
> It's a type subversion that doesn't require casts.

Yes, and this is a problem.

But on the flip side, requring casts for non-ubyte value types may be too  
restrictive.  Do we want to require casts when the array being filled is  
for example utf-8?  If so, then won't that disallow such a function in  
safe D?

I'm unsure which is worse.  To be sure, allowing references to be blindly  
filled in is not a good thing.  But disallowing reading a file properly in  
safe D is not good either.

Are there other techniques we can use?  I like the use of void[] because  
it says what it is -- I don't have any knowledge of your typeinfo, I'm  
just going to fill in whatever you tell me to.

What we need is a type that is implicitly castable from pure value types  
-- a non-pointer-void.  Does this make sense?  Is it too much?

-Steve


More information about the Digitalmars-d mailing list