Efficient outputting of to-string conversions
Steven Schveighoffer
schveiguy at yahoo.com
Tue Feb 8 08:24:16 PST 2011
On Tue, 08 Feb 2011 11:09:44 -0500, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> On Tue, 08 Feb 2011 10:55:23 -0500, spir <denis.spir at gmail.com> wrote:
>
>> On 02/07/2011 11:38 PM, Tomek Sowiński wrote:
>>> Jonathan M Davis napisał:
>>>
>>>> On Monday 07 February 2011 13:10:09 Tomek Sowiński wrote:
>>>>> Looks like std.conv.to always allocates behind the scenes. It's a
>>>>> shame as
>>>>> the returned string is immediately processed and discarded in my XML
>>>>> writer. Are there plans to include a custom output variant, e.g.
>>>>> to!string(7, outputRange)?
>>>>
>>>> http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP9
>>>
>>> I know about Steven's proposal but it applies only to user types not
>>> primitives. Either way std.conv.to would need a buffered output range
>>> as integers are written from the right. Any chance for an abstraction
>>> analogous to buffered input ranges discussed recently?
>>
>> I haven't read a solution like the proposal for writeTo would not apply
>> to primitives. Is it really so? (If only for language consistency, I
>> would prefere this big shift to apply to all types.)
>
> writeTo does not need to apply to primitives because primitives can be
> written to streams without first converting to char[]. For instance,
> one does not write:
>
> writeln(to!string(5))
>
> The whole point of writeTo is to allow easy output of custom data types
> that the standard library does not know how to output. It was not meant
> to extend to primitives.
>
> As far as Tomek's request, I would expect
> std.format.formattedWrite(buffer, "%s", 7) to work, or
> std.format.formatValue (with associated FormatSpec, which I don't feel
> like looking up the usage of)
BTW, I think we probably should have a formatValue override like this
void formatValue(Char, Writer, T)(Writer w, T t)
{
FormatSpec!Char fs; // use default options
formatValue(w, t, fs);
}
Having to construct a FormatSpec when I just want the default seems like
overkill. Esp. since FormatSpec arg is always ref.
-Steve
More information about the Digitalmars-d
mailing list