[phobos] expand for std.metastrings
Robert Jacques
sandford at jhu.edu
Tue Nov 2 12:34:12 PDT 2010
On Tue, 02 Nov 2010 14:27:28 -0400, kenji hara <k.hara.pg at gmail.com> wrote:
>> enum code = text(q{ enum msg = "I call you "}, count, q{" times"} );
>> enum code = text(` enum msg = "I call you `, count, ` times;` );
>> enum code = ` enum msg = "I call you ` ~ count ~ ` times;`
>> enum code = q{ enum msg = "I call you "} ~ count ~ q{" times"; }
>
> 1st and 4th does not generate intended code string, but generates
> invalid one.
> expand! generates 3rd code automatically cooperation with mixin.
> (2nd is ... the code currently others want to generate for run-time
> performance?)
Opps. Sorry, I tested 2 & 3, but forgot to test 1 & 2. I also seemed to
have forgotten a " after times in 2 & 3.
Also, what do you mean by: (2nd is ... the code currently others want to
generate for run-time performance?)
>> I admit ${n} is slightly better than },n,q{, but it's by no means ugly.
>> (And
>> using `` instead of q{} makes it better: `,n,`)
>
> The advantage of expand! is that escapes string quotations and
> concatenates correctly while keeping readability of our meta-code
> well.
> (In above 3rd, you escape q{} to `` and interpolate "count" *manually*.)
Yes, manually escaping and concatenating, in all but the trivial cases, is
really annoying. But my main point was that text is both CTFE-able and
lets you cleanly do everything expand does naturally. Expand is more
complex to use, isn't self-documenting (i.e. you have to remember to use a
mixin), is mostly redundant and increases the radius of comprehension of
phobos. However, it does allow you to escape a token strings inside a
nested string in a nice in-lined way. So far, the examples don't seem to
provide a strong argument for yet another text formater beyond text and
Format. Also, if I recall correctly the plan is to get a large portion of
both phobos and D CTFE compatible, which would eventually eliminate the
need for the current metastrings.
More information about the phobos
mailing list