Alternate string literal syntax (with mixins)?

Johan Granberg lijat.meREM at OVE.gmail.com
Sun Feb 11 08:51:00 PST 2007


Johan Granberg wrote:

> Kristian Kilpi wrote:
> 
>> 
>> String literals with mixins are a bit awkward sometimes (editor
>> highlighting etc).
>> 
>> Some special marks -- I use @{ }@ here -- could be used to mark a part of
>> a source file as a string literal, just like /* */ marks a part of code
>> as a comment. For example:
>> 
>>    mixin(
>>      @{
>>        //this is a string literal block
>>        if(...) {
>>          ...
>>        }
>>      }@
>>    );
>> 
>> The @{ }@ marks have a close relation, of course, with quotation marks
>> "". But because there is a starting mark and an ending mark, you can nest
>> them. (And because they are used to mark a part of a file as a string
>> literal, they are not actually the part of the 'working code' just like
>> the "" literals are, if you get what I'm trying to say.)
>> 
>> E.g.
>> 
>>    alias @{
>>      str = @{ foo }@ ~ @{ bar }@;
>>      str ~= "blah";
>>      if(...) {
>>        ...
>>      }
>>    }@ MyCode;
>> 
>>     mixin(MyCode);
> 
> Wouldn't it be a better solution if the escape syntax you described
> represented a custom format that mixins was thought to handle? What I'm
> thingking is something like lisps quotes, then the escaped code could be
> tokenized and we could modify tokens instead of strings. (for a small
> fraction of cases the string might be better but then we could have the
> current syntax)

While I'm at it I might suggest using <[ and ]> as tokens instead of @{.
This is the tokens used in nemerle (if I understood their manual right) and
it is unnecessary to use a different token just because. 

http://nemerle.org/Syntax_extensions




More information about the Digitalmars-d mailing list