pure format

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 4 11:27:16 PDT 2015


On 6/4/15 2:08 PM, Ali Çehreli wrote:
> On 06/04/2015 10:02 AM, Oleg B wrote:
>
>  > 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...
>
> Floating point operations share global state ("flags" or "attributes")
> for rounding mode, exception and trap handling. Perhaps that's why
> floating point format cannot be pure.

That is a terrible excuse if that is what the issue is.

I recalled Don discussing this, found these threads (they are old, maybe 
something has gotten better since then):

http://forum.dlang.org/post/gpddrm$20u7$1@digitalmars.com
http://forum.dlang.org/post/h8ad5r$22jj$1@digitalmars.com

 From that, it does seem that D does not care about the rounding modes, 
and just considers the code pure.

-Steve


More information about the Digitalmars-d mailing list