On Monday, 9 June 2014 at 18:09:07 UTC, monarch_dodra wrote:
On Monday, 9 June 2014 at 17:57:24 UTC, Steven Schveighoffer wrote:
I think we are confusing things here, I was talking about strip :)

strip and split are actually both pretty much in the same boat actually in regards to that, so just 's/split/strip/g', and the same answer will apply.

"split" (and "splitter") actually have it a bit more complicated, because historically, if you imported both string and algorithm, then "split(myString)" will create an ambiguous call. The issue is that you can't do selective imports when you already have a local object with the same name, so algorithm had:

----
auto split(String)(String myString) {
   return std.string.split(myString);
}
----
rather than
----
public import std.string : split;
----

I tried to "fix" the issue by removing "split(String)" from algorithm, but that created some breakage.

So Andrei just came down and put *everything* in algorithm, and added an "public import std.algorithm : split" in std.string.

This works, but it does mean that:
1. string unconditionally pulls algorithm.
2. You can do things like:
   std.string.split([1, 2, 3], 2);

IMO, the "strip" solution is better :/

If we could split up std.algorithm into individual modules, that would probably help.

-Steve

Yes.

I think it makes sense to put any generic range based algorithms (split and so forth) into std.algorithm. It's always my first port of call, when I have a range. However, that you can do

std.string.split([1, 2, 3], 2);

is not exactly a desirable situation.

Reply via email to