pure format

Oleg B via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 4 10:02:45 PDT 2015


On Thursday, 4 June 2015 at 16:21:54 UTC, Jonathan M Davis wrote:
> On Thursday, 4 June 2015 at 14:33:39 UTC, Oleg B wrote:
>> Hello. I not found realization of pure format function (in 
>> phobos it not pure) and write minimal custom realization.
>> https://github.com/dexset/desstdx/blob/master/source/des/stdx/pformat.d#L472
>> Now it works with numbers and strings, but in future I improve 
>> it.
>> Maybe my realization can help someone =)
>> Contained in the dub package 
>> http://code.dlang.org/packages/desstdx
>>
>> If pure format exists tell about it, please.
>
> std.format.format should be pure if its arguments have pure 
> toString methods or are built-in types. There may be 
> implementation issues preventing it for one reason or another 
> (I don't know), but if so, then that's a bug that needs to be 
> fixed. Regardless, there should be no need for a separate 
> format function which is pure.
>
> - Jonathan M Davis

I think toString for float must be pure, but in practice it's not.

import std.stdio;
import std.string;
string test( float abc ) pure { return format( "abc: % 6.3f", abc 
); }
void main() { writeln( test( 13.3 ) ); }

$ rdmd purefmtfloating.d
purefmtfloating.d(3): Error: pure function 'purefmtfloating.test' 
cannot call impure function 'std.format.format!(char, 
float).format'
Failed: ["dmd", "-v", "-o-", "purefmtfloating.d", "-I."]

DMD64 v2.067.1

It's a bug? I read what std.format.format using libc sprintf 
http://www.digitalmars.com/d/archives/digitalmars/D/learn/std.conv.to_purity_68957.html 
and if it try it's not a bug...


More information about the Digitalmars-d mailing list