Bug 6849 – std.algorithm.remove design

Status
RESOLVED
Resolution
INVALID
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-10-25T04:21:00Z
Last change time
2011-11-15T16:57:56Z
Assigned to
nobody
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2011-10-25T04:21:13Z
A D2 program: import std.stdio, std.algorithm; void main() { dchar[] data = "abcde"d.dup; writeln(data); writeln(remove(data, 0)); writeln(data); writeln(remove(data, 2)); writeln(data); } With DMD 2.056beta3 it prints: abcde bcde bcdee bcee bceee Expected output: abcde bcde bcde bce bce Or maybe it's better for remove() to return void, to underline its in-place nature (this is often done in Python, where functions the modify da in-place usually return just None, and functions with a name that ends with "ed" create new data and return it, like the sort/sorted pair): import std.stdio, std.algorithm; void main() { dchar[] data = "abcde"d.dup; writeln(data); data.remove(0); writeln(data); data.remove(2); writeln(data); } Expected output: abcde bcde bce This is similar to what happens in Python2: >>> data = ['a', 'b', 'c', 'd', 'e'] >>> del data[0] >>> data ['b', 'c', 'd', 'e'] >>> del data[2] >>> data ['b', 'c', 'e']
Comment #1 by bearophile_hugs — 2011-10-25T16:27:57Z
I didn't fully understand the situation, as it often happens: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=30277 Yet I think the problem exists, and there are Python (and other languages) programmers too coming to D. See some comments, with an alternative proposal too, about a replaceInPlace() function: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=30281
Comment #2 by bearophile_hugs — 2011-10-26T10:14:57Z
From the same thread: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=30294 Steven Schveighoffer: > Here is the resulting array and final state of a: > > import std.stdio, std.algorithm; > void main() { > int[] a = [ 0, 1, 2, 3 ]; > writeln( remove!(SwapStrategy.unstable)(a, 1)); > writeln(a); > } > > output: > > [3, 1, 2] > [3, 1, 2, 3] > > Clearly, index 0 was removed, not index 1. Please file a bug.
Comment #3 by schveiguy — 2011-10-26T10:25:44Z
(In reply to comment #2) > From the same thread: > > http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=30294 > > Steven Schveighoffer: > > > > > Clearly, index 0 was removed, not index 1. Please file a bug. This is not a design bug, it's an actual bug in the code (does not work as designed), it should be separate from this enhancement request.
Comment #4 by bearophile_hugs — 2011-10-26T15:07:02Z
(In reply to comment #3) > (In reply to comment #2) > > From the same thread: > > > > http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=30294 > > > > Steven Schveighoffer: > > > > > > > > Clearly, index 0 was removed, not index 1. Please file a bug. > > This is not a design bug, it's an actual bug in the code (does not work as > designed), it should be separate from this enhancement request. Right, it's my mistake of mixing two different things in the same issue. Sorry. I'll open another issue. Please ignore Comment #2.
Comment #5 by bearophile_hugs — 2011-11-15T16:57:35Z
To clear up this bug report I close it and replace it with a a bug report and a more focused enhancement request. See bug 6956 instead of Comment #2. See also bug 6957.