On 10/21/11 1:38 PM, Walter Bright wrote:
On 10/21/2011 2:51 AM, Martin Nowak wrote:
You have a good point here. I would have immediately thrown out the
loop AFTER
profiling.
What hits me here is that I had an incorrect program with built-in
unicode aware
strings.
This is counterintuitive to correct unicode handling throughout the
std library,
and even more to the complementary operation of appending any char
type to strings.

I understand the issue, but I don't think it's resolvable.

It is resolvable, just not without breaking compatibility. Latching on the notion that a problem is unsolvable is highly nocive because it sets up the mind for failing to not only look for solutions, but also to see and understand them when they're in the open.

I said this a number of times, and I repeat: if we had the luxury of doing it over again, I'd disable random access and .length for char[], wchar[], and their qualified versions. For those types I would add a property .rep that yields respectively ubyte[], ushort[], and the appropriately-qualified variants.

This would shed the remaining awkwardnesses from a generally very elegant approach to string handling.

The loop issue would be trivial to solve. foreach (x; s) would iterate one dchar at a time, whereas foreach (x; s.rep) would iterate one ubyte or ushort at a time. There would be the ability to iterate foreach (ref x; s.rep) but not foreach (ref x; s).


Andrei

Reply via email to