[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