www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - string-arguments of functions in 'std.file'

reply CLXX <kk_tnr hotmail.com> writes:
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.
Feb 28 2009
next sibling parent reply Daniel Keep <daniel.keep.lists gmail.com> writes:
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
Feb 28 2009
parent reply torhu <no spam.invalid> writes:
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
Feb 28 2009
parent Daniel Keep <daniel.keep.lists gmail.com> writes:
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
Feb 28 2009
prev sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
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
Feb 28 2009