Thread overview
string-arguments of functions in 'std.file'
Feb 28, 2009
CLXX
Feb 28, 2009
Daniel Keep
Feb 28, 2009
torhu
Mar 01, 2009
Daniel Keep
February 28, 2009
dmd2.025, Windows

Some standard functions receive 'string' arguments.
This is not a bug, but not good specs.

void[] read( in string name );
void[] write( in string name, const void[] buffer );
...

They should be

void[] read( in char[] name );
void[] write( in char[] name, const void[] buffer );
...

Former cannot receive char[]-arguments, and latter can. This change has backward compatibility.
February 28, 2009

CLXX wrote:
> dmd2.025, Windows
> 
> Some standard functions receive 'string' arguments.
> This is not a bug, but not good specs.
> 
> void[] read( in string name );
> void[] write( in string name, const void[] buffer );
> ....
> 
> They should be
> 
> void[] read( in char[] name );
> void[] write( in char[] name, const void[] buffer );
> ....
> 
> Former cannot receive char[]-arguments, and latter can. This change has backward compatibility.

I... wait, what?

*blinks*

That change will just mean that the functions can't take string arguments, and if you WANT to pass a string, you have to heap-allocate a new one.

Why don't you just pass a string?

  -- Daniel
February 28, 2009
On 28.02.2009 15:47, Daniel Keep wrote:
>
> CLXX wrote:
>>  dmd2.025, Windows
>>
>>  Some standard functions receive 'string' arguments.
>>  This is not a bug, but not good specs.
>>
>>  void[] read( in string name );
>>  void[] write( in string name, const void[] buffer );
>>  ....
>>
>>  They should be
>>
>>  void[] read( in char[] name );
>>  void[] write( in char[] name, const void[] buffer );
>>  ....
>>
>>  Former cannot receive char[]-arguments, and latter can.
>>  This change has backward compatibility.
>
> I... wait, what?
>
> *blinks*
>
> That change will just mean that the functions can't take string
> arguments, and if you WANT to pass a string, you have to heap-allocate a
> new one.
>
> Why don't you just pass a string?

Hehe, someone had to little coffee today.  'in' implies const, and invariant is implicitly convertible to const. So Mr. 'CLXX' is right. :P
February 28, 2009
CLXX wrote:
> dmd2.025, Windows
> 
> Some standard functions receive 'string' arguments.
> This is not a bug, but not good specs.
> 
> void[] read( in string name );
> void[] write( in string name, const void[] buffer );
> ...
> 
> They should be
> 
> void[] read( in char[] name );
> void[] write( in char[] name, const void[] buffer );
> ...
> 
> Former cannot receive char[]-arguments, and latter can.
> This change has backward compatibility.

Yah, many of them are already changed in my tree. Phobos will have to sit this release out, though.

Andrei
March 01, 2009

torhu wrote:
> On 28.02.2009 15:47, Daniel Keep wrote:
>>
>> CLXX wrote:
>>>  dmd2.025, Windows
>>>
>>>  Some standard functions receive 'string' arguments.
>>>  This is not a bug, but not good specs.
>>>
>>>  void[] read( in string name );
>>>  void[] write( in string name, const void[] buffer );
>>>  ....
>>>
>>>  They should be
>>>
>>>  void[] read( in char[] name );
>>>  void[] write( in char[] name, const void[] buffer );
>>>  ....
>>>
>>>  Former cannot receive char[]-arguments, and latter can.
>>>  This change has backward compatibility.
>>
>> I... wait, what?
>>
>> *blinks*
>>
>> That change will just mean that the functions can't take string arguments, and if you WANT to pass a string, you have to heap-allocate a new one.
>>
>> Why don't you just pass a string?
> 
> Hehe, someone had to little coffee today.  'in' implies const, and invariant is implicitly convertible to const. So Mr. 'CLXX' is right. :P

*stares at it*

Well, that's what I get for posting at 2 AM.

  -- Daniel