[Issue 6595] New: std.string.format() and sformat() are obsolete
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Sep 2 09:54:10 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6595
Summary: std.string.format() and sformat() are obsolete
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: Phobos
AssignedTo: nobody at puremagic.com
ReportedBy: k.hara.pg at gmail.com
--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2011-09-02 09:54:03 PDT ---
This enhancement issue is nearly a bug report.
format() and sformat() use std.format.doFormat as their implementations, but it
is old feature, and its features are fewer than formatValue family.
And it is causing not a few issues:
bug 3715 - std.string.format can't use const/immutable toString functions
bug 4266 - add support for structs in std.format.doFormat
bug 4532 - Position specifiers don't work in format
bug 5444 - std.string.format: arguments without format specifier appended to
result
bug 5970 - fix BigInt.toString
I think format() should be implemented just appender and formattedWrite like
follows:
string format(Char, Args...)(in Char[] fmt, Args args)
{
auto w = appender!string();
formattedWrite(w, fmt, args);
return w.data;
}
This 'format()' provides just the same features as writef(ln) functions about
formatting.
And sformat() also could replace like follows:
char[] sformat(Char, Args...)(char[] buf, in Char[] fmt, Args args)
{
size_t i;
void sink(const(char)[] s) {
if (buf.length < i + s.length)
onRangeError("std.string.sformat", 0);
buf[i .. i + s.length] = s[];
i += s.length;
}
formattedWrite(&sink, fmt, args);
return buf[0 .. i];
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list