Bug 13054 – pure nothrow @safe std.algorithm.schwartzSort

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2014-07-06T12:19:22Z
Last change time
2024-12-01T16:21:44Z
Assigned to
No Owner
Creator
bearophile_hugs
Moved to GitHub: phobos#10068 →

Comments

Comment #0 by bearophile_hugs — 2014-07-06T12:19:22Z
In dmd 2.066beta1 this compiles and works correctly: void main() pure nothrow @safe @nogc { import std.algorithm: sort; import std.math: abs; int[3] data = [-2, 1, 3]; auto r = data[].sort!q{a.abs < b.abs}; } But schwartzSort doesn't support each of those tags: void main() pure nothrow @safe @nogc { import std.algorithm: schwartzSort; import std.math: abs; int[3] data = [-2, 1, 3]; auto r = data[].schwartzSort!abs; } temp.d(5,20): Error: pure function 'D main' cannot call impure function 'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0, int[]).schwartzSort' temp.d(5,20): Error: safe function 'D main' cannot call system function 'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0, int[]).schwartzSort' temp.d(5,20): Error: @nogc function 'D main' cannot call non-@nogc function 'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0, int[]).schwartzSort' temp.d(5,20): Error: 'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0, int[]).schwartzSort' is not nothrow temp.d(1,6): Error: function 'D main' is nothrow yet may throw A schwartzSort has to allocate the mapped items, so perhaps it can't be @nogc (unless you allocate them on the C heap), but I think it can support the other tags.
Comment #1 by bugzilla — 2016-06-07T11:23:10Z
Comment #2 by bugzilla — 2016-06-13T01:09:13Z
(In reply to Walter Bright from comment #1) > Partial fix: https://github.com/dlang/phobos/pull/4415 Which was pulled, and the Schwartz is now @safe.
Comment #3 by stanislav.blinov — 2021-12-08T18:54:42Z
Nowadays schwartzSort infers nothrow @safe and @nogc, but not pure as it seems to rely on its own "trustedMalloc" and "trustedFree" instead of core.memory.pure{Malloc,Free}.
Comment #4 by stanislav.blinov — 2021-12-08T21:37:13Z
Another partial fix: https://github.com/dlang/phobos/pull/8329 If GC.add/removeRange could be fake pure, then this enhancement would be fulfilled.
Comment #5 by robert.schadek — 2024-12-01T16:21:44Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10068 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB