On Sunday, 9 March 2014 at 01:23:27 UTC, Andrei Alexandrescu wrote:

I was thinking of these too:

1. Revisit std.encoding and perhaps confer legitimacy to the character types defined there. The implementation in std.encoding is wanting, but I think the idea is sound. Essentially give more love to various encodings, including Ascii and "bypass encoding, I'll deal with stuff myself".

2. Add byChar that returns a random-access range iterating a string by character. Add byWchar that does on-the-fly transcoding to UTF16. Add byDchar that accepts any range of char and does decoding. And such stuff. Then whenever one wants to go through a string by code point can just use str.byChar.


Andrei

I like these two points you make here. In particular, I like the recent addition of byGrapheme, and other ideas along this line which provide a custom range interface to a string. Such additions do not break code but add opt-in functionality for those who need it, while leaving the default case intact.

Overall, I think the current string design in D2 stikes a nice balance between performance and functionality. It does not reach Unicode perfection but gets rather close to good useability while still maintaining good C compatibility and performance in the default case.

As for Walter's original post regarding the use of decode by default in std.array.front, if I had it my way, I would prefer all performance hits to be explicit so that way I know what I am paying for by simply reading the code. Nonetheless, this change will break code in the wild relying on its current behavior. As a result, I feel that making such a fundamental change would be better to postpone until the next major version of D is considered. D currently seems to carry much hope due to its potential, but is struggling to gain reputation as a reliable, quality, production-ready language. If such fundamental changes are made at this point it will do a lot of harm to D's reputation which it may never recover from. Rather than making such a change now, I feel that fixing all open issues in bugzilla and 'completing' D2 would do much good. Then, near the close of implementing D2, a new library implementation of text capabilities could be prototyped for D3 and flagged as beta-please-test-but-avoid-use-in-production-code. Such an approach would benefit from the insights gained from implementing this version in D2 and also get much needed input from actual usage.

Joseph

Reply via email to