Bug 6595 – std.string.format() and sformat() are obsolete
Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-09-02T09:54:00Z
Last change time
2012-04-24T04:59:22Z
Keywords
patch
Assigned to
nobody
Creator
k.hara.pg
Comments
Comment #0 by k.hara.pg — 2011-09-02T09:54:03Z
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];
}