digitalmars.D.bugs - [Issue 12170] New: sum(double[]) is not pure
- d-bugmail puremagic.com (24/24) Feb 15 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12170
- d-bugmail puremagic.com (20/20) Feb 15 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12170
- d-bugmail puremagic.com (15/15) Feb 15 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12170
- d-bugmail puremagic.com (9/13) Feb 15 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12170
- d-bugmail puremagic.com (15/18) Feb 27 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12170
https://d.puremagic.com/issues/show_bug.cgi?id=12170 Summary: sum(double[]) is not pure Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: rejects-valid Severity: normal Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc import std.algorithm; void main() pure { [1.0].sum; } dmd 2.065beta3 gives: test.d(3,10): Error: pure function 'D main' cannot call impure function 'std.algorithm.sum!(double[]).sum' -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 15 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12170 Peter Alexander <peter.alexander.au gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |peter.alexander.au gmail.co | |m OS/Version|Windows |All 06:09:57 PST --- The problem is this: "Cyclic functions (i.e. functions that wind up directly or indirectly calling themselves) are inferred as being impure, throwing, and system." http://dlang.org/function.html sum uses a recursive algorithm for summing floating point ranges for extra accuracy, so its purity is not inferred. It cannot just be marked as pure because the range operations it uses may not be pure. I'm not sure why that cyclic function restriction exists. I think it should be possible to infer these attributes on recursive functions. I'll have a think. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 15 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12170 bearophile_hugs eml.cc changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|sum(double[]) is not pure |sum(double[]) is not pure | |nothrow Yes, the same happens with nothrow: void main() nothrow { import std.algorithm: sum; [1.0].sum; } -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 15 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12170The problem is this: "Cyclic functions (i.e. functions that wind up directly or indirectly calling themselves) are inferred as being impure, throwing, and system."Until that compiler limitation is lifted, a solution is to convert the recursive algorithm of sum() in an iterative one. Because sum() is something you often want to use in pure nothrow functions. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 15 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12170 monarchdodra gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |monarchdodra gmail.comUntil that compiler limitation is lifted, a solution is to convert the recursive algorithm of sum() in an iterative one. Because sum() is something you often want to use in pure nothrow functions.Well, "sum" is specifically implemented to do pair-wise sumation of floats, to reduce computational error, as opposed to the "dumber" "member by member" sum. The idea would be to transform the recursive algorithm into an iterative one, but (AFAIK), this usually requires a stack-type structure. Either that, or request better inference for cyclic functions. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 27 2014