View mode: basic / threaded / horizontal-split · Log in · Help
June 27, 2010
What are delimited string, heredoc and D token strings?
Hi all,

The D2.0 lexical page describes delimited string and token string 
literals.  Is there any example of how these are used and why, somewhere?

Thanks

-- Pierre
June 27, 2010
Re: What are delimited string, heredoc and D token strings?
Pierre Rouleau <prouleau001@gmail.com> wrote:

> Hi all,
>
> The D2.0 lexical page describes delimited string and token string  
> literals.  Is there any example of how these are used and why, somewhere?

Token strings are added for the specific use case of string mixins[1].
They must contain valid D code.

mixin( q{ a = b; } ); // Works.
mixin( q{ this is nonsense, I tell you! } ); // Does not work.

Editors may syntax-highlight token strings as if it were normal code.
They often do, by virtue of having no idea that it is indeed a string.


Delimited strings and heredoc strings exist for simplicity of adding long
strings to the source.

q"EOS
Heredoc strings allow you to add long string literals to your code.
They also let you embed "quotes" 'of' `various` ´kinds´ without escaping
them.
EOS"

q"(Delimited strings are much the same as "heredoc" strings, but somewhat
more succinct, by not using a whole identifier for terminators. They are
thus not as suited for long texts.)"


[1]: http://digitalmars.com/d/2.0/statement.html#MixinStatement
     also,
     http://digitalmars.com/d/2.0/expression.html#MixinExpression
     http://digitalmars.com/d/2.0/module.html#MixinDeclaration
-- 
Simen
June 27, 2010
Re: What are delimited string, heredoc and D token strings?
On 27/06/10 9:52 AM, Simen kjaeraas wrote:
> Pierre Rouleau <prouleau001@gmail.com> wrote:
>
>> Hi all,
>>
>> The D2.0 lexical page describes delimited string and token string
>> literals. Is there any example of how these are used and why, somewhere?
>
> Token strings are added for the specific use case of string mixins[1].
> They must contain valid D code.
>
> mixin( q{ a = b; } ); // Works.
> mixin( q{ this is nonsense, I tell you! } ); // Does not work.
>
> Editors may syntax-highlight token strings as if it were normal code.
> They often do, by virtue of having no idea that it is indeed a string.
>
>
> Delimited strings and heredoc strings exist for simplicity of adding long
> strings to the source.
>
> q"EOS
> Heredoc strings allow you to add long string literals to your code.
> They also let you embed "quotes" 'of' `various` ´kinds´ without escaping
> them.
> EOS"
>
> q"(Delimited strings are much the same as "heredoc" strings, but somewhat
> more succinct, by not using a whole identifier for terminators. They are
> thus not as suited for long texts.)"
>
>
> [1]: http://digitalmars.com/d/2.0/statement.html#MixinStatement
> also,
> http://digitalmars.com/d/2.0/expression.html#MixinExpression
> http://digitalmars.com/d/2.0/module.html#MixinDeclaration

Thanks for this clear explanation, Simen.

I was wondering if D had the equivalnt of Python's triple quote string 
literals and it does: the delimited string serves the same purpose.  Great!

-- Pierre
June 27, 2010
Re: What are delimited string, heredoc and D token strings?
On 27/06/10 9:52 AM, Simen kjaeraas wrote:
> Pierre Rouleau <prouleau001@gmail.com> wrote:
>
>> Hi all,
>>
>> The D2.0 lexical page describes delimited string and token string
>> literals. Is there any example of how these are used and why, somewhere?
>
> Token strings are added for the specific use case of string mixins[1].
> They must contain valid D code.
>
> mixin( q{ a = b; } ); // Works.
> mixin( q{ this is nonsense, I tell you! } ); // Does not work.
>
> Editors may syntax-highlight token strings as if it were normal code.
> They often do, by virtue of having no idea that it is indeed a string.
>
>
> Delimited strings and heredoc strings exist for simplicity of adding long
> strings to the source.
>
> q"EOS
> Heredoc strings allow you to add long string literals to your code.
> They also let you embed "quotes" 'of' `various` ´kinds´ without escaping
> them.
> EOS"
>
> q"(Delimited strings are much the same as "heredoc" strings, but somewhat
> more succinct, by not using a whole identifier for terminators. They are
> thus not as suited for long texts.)"
>
>
> [1]: http://digitalmars.com/d/2.0/statement.html#MixinStatement
> also,
> http://digitalmars.com/d/2.0/expression.html#MixinExpression
> http://digitalmars.com/d/2.0/module.html#MixinDeclaration

Thanks for this clear explanation, Simen.

I was wondering if D had the equivalent of Python's triple quote string 
literals and it does: the delimited string serves the same purpose.  Great!

-- Pierre
June 27, 2010
Re: What are delimited string, heredoc and D token strings?
Pierre Rouleau:
> I was wondering if D had the equivalnt of Python's triple quote string 
> literals and it does: the delimited string serves the same purpose.  Great!

But keep in mind that normal D string literals can span more than one line :-)

Bye,
bearophile
June 27, 2010
Re: What are delimited string, heredoc and D token strings?
On 27/06/10 11:36 AM, bearophile wrote:

> But keep in mind that normal D string literals can span more than one line :-)

In what sense? In the sense that adjacent strings are concatenated? If I 
want to create a string literal that embeds new line without explicitly 
placing a '\n' inside the string, I did not see any other way than using 
the delimited string (at least inside 
http://www.digitalmars.com/d/2.0/lex.html).  What am I missing?

-- Pierre
June 27, 2010
Re: What are delimited string, heredoc and D token strings?
Pierre Rouleau:
> In what sense?

This is valid D1 code:

import std.stdio;
void main() {
 string s = "this is 
 just
a 
test";
 writefln(s);
}

Bye,
bearophile
June 29, 2010
Re: What are delimited string, heredoc and D token strings?
On 27/06/10 1:03 PM, bearophile wrote:
> Pierre Rouleau:
>> In what sense?
>
> This is valid D1 code:
>
> import std.stdio;
> void main() {
>    string s = "this is
>    just
> a
> test";
>    writefln(s);
> }
>
> Bye,
> bearophile

Thanks!

-- Pierre
Top | Discussion index | About this forum | D home