On 2/8/18 1:25 PM, Walter Bright wrote:
On 2/8/2018 7:07 AM, Steven Schveighoffer wrote:
My concern in the hexString case is the sheer requirement of CTFE for
something that is so easy to do in the compiler, already *done* in the
compiler, and has another form specifically for hex strings (the
"\xde\xad\xbe\xef" form) that isn't going away. It makes me laugh
actually that Walter is now replacing the implementation with a mixin
of that other form, incurring all the cost of CTFE so you can
transform the string, while breaking existing code in the process:
https://github.com/dlang/phobos/pull/6138
The breakage was due to the original implementation of hexString not
producing a string literal like "abc", but producing an array literal
like ['a', 'b', 'c'], which was not what the documentation said it did.
And naturally, some uses wound up relying on the array behavior.
"abc" is an array (it's an immutable(char)[]). There's no reason why
['a','b','c'] should be different than "abc" (other than the hidden null
character, which is irrelevant here).
Perhaps the fact that using a string rather than an array causes code to
fail should be addressed?
What the PR does is fix hexString so that hexString!"deadbeef" rewrites
it to the string literal "\xde\xad\xbe\xef". It's classic "lowering".
Isn't it amazing that D can even do this?
It's great that D has this power, and would be really useful if D's
language didn't already have a way to do this in a builtin way.
Simplifying the compiler and pushing things off into the library makes
the compiler and spec smaller and less buggy. It also has the nice
feature of providing a simple path for anyone who wants to write their
own custom string syntax, such as EBCDIC string literals (!).
How can this be a huge simplification? I mean you already have code that
parses hex characters in a string array, all you need is one flag that
assumes all character pairs have been preceded by \x. I think this will
save probably 4 or 5 lines of code?
It also doesn't preclude at all someone writing library code to make
their own custom string syntax.
-Steve