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: nob...@puremagic.com
        ReportedBy: k.hara...@gmail.com


--- Comment #0 from Kenji Hara <k.hara...@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: -------

Reply via email to