Hi swift-evo,

Forgive my naive interjection here.  I’ve enjoyed lurking on this list and 
watching all the discussions around topics I don’t even fully understand, but 
this one strikes me.

I certainly agree that multi-line literals should be undistorted, and I also 
agree that they should be 100% easy to edit/read in the source. To that end, my 
(hold your breath) PHP dev days made great use of the heredoc syntax. I know it 
has been covered in this thread but I haven’t seen any compelling reason why it 
shouldn’t be the solution to this wanted feature.

var myString = <<<SOMETAG
// string content starts here after the new line
SOMETAG>>>      // ends here

String interpolation could be implemented as-is:

var myString = <<<LETTER
Dear \(receipientName),

I’m writing this letter to you… // more lines
// more lines
// more lines
Sincerely,

\(senderName)
LETTER>>>


There are a few constraints from PHP land which might make this easier (? 
simpler?) to implement:

- multi-line string contents begin on the NEXT line after the opening heredoc 
operator
- closing operator MUST have no prefix characters (so it must be directly after 
the last line of the string, and cannot be indented)
—> this means source code formatting can be a tad out of alignment with the 
rest of your code but then what multi-line string isn’t?
-> in fact the behavior is very similar to a <pre></pre> block of HTML, 
whitespace counts!

Benefits include:

- absolutely no need for a line-by-line delimiter
- any character could be supported in the multi-line block
- string interpolation is completely possible (and could be made optional if 
that speeds things up)
- parser errors would be pretty simple to read and should be sufficient to 
prevent compile-time errors


Again apologies if this has already been shot down, and yes I fully admit that 
I don’t even know the origin of heredoc syntax (it’s probably something awful 
or great from the past) but objectively, I can’t see too many downsides to this 
solution.

With humility,

-Chris


> On May 2, 2016, at 7:47 AM, Rainer Brockerhoff via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> On 5/2/16 09:53, Brent Royal-Gordon via swift-evolution wrote:
>>      When you are embedding enormous string literals in source code, you 
>>      must put undistorted representation of the string above all other 
>>      considerations. If the design which best permits the string to be 
>>      written verbatim is ugly, bulky, unlike other language constructs, 
>>      disruptive to code readability, error-prone, arbitrary, difficult to 
>>      parse, or otherwise a wart on the language, that is simply the price we 
>>      have to pay for that feature.
> 
> +1. I've tried to write this up a few times, but couldn't find a
> satisfactory syntax; still, how about introducing "named comments" or
> "footnotes in comments" like this:
> 
> /*#label#
> ...N lines of unescaped, as-is text
> #*/
> 
> and elsewhere in source referring to this with some #construct(label)
> syntax?
> 
>>      But it's a different story for short multiline strings. When you are 
>>      writing a little bit of text, but still more than one line, you don't 
>>      want to disrupt your code's indentation, add whole lines just for 
>>      delimiters, insert bizarre or cryptic tokens into your code, or create 
>>      syntax errors which take ten minutes to trace back to their source. You 
>>      want a different feature, with different tradeoffs.
> 
> At least for Xcode having a "paste as escaped string" would solve this,
> other platforms/editors could have a standard macro with the same
> effect. Of course readability of the pasted literal would suffer.
> 
> 
> -- 
> Rainer Brockerhoff  <rai...@brockerhoff.net>
> Belo Horizonte, Brazil
> "In the affairs of others even fools are wise
> In their own business even sages err."
> http://brockerhoff.net/blog/
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to