On Sun, 04 Sep 2011 07:07:05 -0400, Jacob Carlborg <[email protected]> wrote:
On 2011-09-03 21:54, Andrei Alexandrescu wrote:
Hello,
There are a number of issues related to D's current handling of streams,
including the existence of the imperfect etc.stream and the
over-specialization of std.stdio.
Steve has worked on an extensive overhaul of std.stdio which would
obviate the need for etc.stream and would improve both the generality
and efficiency of std.stdio.
Please chime in with feedback; he's away from the Usenet but allowed me
to post this on his behalf. I uploaded the docs to
http://erdani.com/d/new-stdio/phobos-prerelease/std_stdio.html
Thanks,
Andrei
I think that openFile, File.open and CStream.open should shouldn't take
a string as the mode, it should be an enum or similar. Andrei is making
a big deal out of using enums instead of bools. A bool value can contain
"true" or "false", a string can contain an infinite number of different
values.
openFile takes it as a template argument, and it will fail at compile time
if the parameter is not correct (if not now, it will when the library is
ready for inclusion).
I agree that enum is cleaner and easier to deal with from the library's
point of view, but we have 2 things going for us by using strings:
1. The string formats are backwards compatible, and well defined. In
fact, CStream.open just passes the mode string without modification to
fopen.
2. The brevity of and ability to comprehend a string literal vs. multiple
enums.
You can think of it like printf (or writef). The format string has
infinitely wrong possible format strings, which must be rejected at run
time. But I'll take that any day over C++'s format modifiers which are
type checked at compile-time.
Remember, typically, string formats are most frequently literals, and easy
to read/write. While there is great potential for invalid parameters, the
reality is this rarely happens, and if it does, the errors are seen
immediately.
-Steve