These are my comments so far.

Regarding the use of _” and “_ : It works but I think the _ already has a 
meaning elsewhere and may bring just a little bit of confusion at first.  But 
more than that, I’m not sure I like the way it looks aesthetically.  I can’t 
quite explain it.  It is one character shorter than the triple quote, i.e. “””. 
 However, I wonder if other alternatives could work out better.  For example, 
here’s a couple:

let xml = @"<?xml version="1.0"?>
        <catalog>
           <book id="bk101" empty="">
               <author>\(author)</author>
               <title>XML Developer's Guide</title>
               <genre>Computer</genre>
               <price>44.95</price>
               <publish_date>2000-10-01</publish_date>
               <description>An in-depth look at creating applications with 
XML.</description>
           </book>
        </catalog>"@

and with optional continuation quote it would look like this:

let xml = @"<?xml version="1.0"?>
           "<catalog>
           “   <book id="bk101" empty="">
           "      <author>\(author)</author>
           "      <title>XML Developer's Guide</title>
           "      <genre>Computer</genre>
           "      <price>44.95</price>
           "      <publish_date>2000-10-01</publish_date>
           "      <description>An in-depth look at creating applications with 
XML.</description>
           “   </book>
           "</catalog>"@

Regarding the HEREDOC notation, all I can say is that it looks heavier.  It may 
be more flexible, but if @“”@ looks better (in my eyes) why would we want 
another alternative.  I would prefer to keep the one that looks better and 
simpler.


> On May 10, 2016, at 2:53 AM, John Holdsworth via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I’ve assembled a gist to summarise the main proposals of this thread.
> 
> https://gist.github.com/johnno1962/5c325a16838ad3c73e0f109a514298bf 
> <https://gist.github.com/johnno1962/5c325a16838ad3c73e0f109a514298bf>
> 
> At the moment there seem to be four proposals for multi-line strings:
> 
> 1) Bent’s proposal for continuation quotes where if a conventional string
> does not close, if the first non-whitespace character of the next line is “
> (or perhaps |) the string is continued. This gives you precise control
> over exactly what is in the string.
> 
> 2) Tyler's original proposal involving strings that can contain newlines
> delimited “””like this“”” as they are in python or, _”like this“_. This works
> well in external editors and on github. Indentation is catered for by 
> stripping 
> any whitespace before the closing quote from all lines in the string.
> 
> 3) HEREDOC syntax <<“TAG” or <<‘TAG’ taken from languages like Perl 
> subject to the same indentation removal rules as “””strings””” above. This
> has the advantage that the literal is clearly separated from your code.
> 
> 4) Heck it all, why not all three syntaxes or some combination.
> 
> (There is a separate feature that all string literals can be prefixed by
> e as in e”\w\d+” to turn of all escape processing for another day)
> 
> While the Swift Lexer could easily accommodate all these syntaxes there was
> talk early on that Swift has more of a "one way, maximally elegant” ethos and 
> indeed I find it difficult imagine the Swift Book breathlessly describing all 
> three
> formats so I’m wondering if push came to shove which format people would 
> chose?
> 
> My vote having undergone a "road to damascus" moment now we know it is
> available sooner rather than later is.. HEREDOC! It’s well understood and
> while at first it would seem to not be a good fit for Swift produces clear 
> code.
> 
> Votes?
> 
> John
> 
> 
>         // Multi-line string proposals
>         // https://github.com/apple/swift/pull/2275 
> <https://github.com/apple/swift/pull/2275>
> 
>         // swift-evolution thread:
>         // 
> http://thread.gmane.org/gmane.comp.lang.swift.evolution/904/focus=15133 
> <http://thread.gmane.org/gmane.comp.lang.swift.evolution/904/focus=15133>
> 
>         // These examples should load in the prototype toolchain available 
> here:
>         // http://johnholdsworth.com/swift-LOCAL-2016-05-09-a-osx.tar.gz 
> <http://johnholdsworth.com/swift-LOCAL-2016-05-09-a-osx.tar.gz>
> 
>         // The prototype currently parses three new forms of quoting
>         // These new types are still string literals for the grammar.
> 
>         "the existing string literal format"
>         _"a format that does not require you to escape " characters"_ // 
> possibly redundant
>         """a python-style syntax that will accept "'s and newlines in the 
> string"""
>         <<"HEREDOC"
>         A full heredoc implementation (will always end in a newline)
>         HEREDOC
> 
>         // These strings can be modified by prefixing the string by letters
>         // There is currently only one, "e" to disable escape processing.
>         // This is primarily used when specifying regular expressions.
> 
>         let str = "print(\"Hello, world!\\n\")"
> 
>         assert( e"print(\"Hello, world!\n\")" == str )
>         assert( e_"print("Hello, world!\n")"_ == str )
>         assert( e"""print("Hello, world!\n")""" == str )
> 
>         // Continuation quotes allow you to extend a standard string literal
>         // over multiple lines. If a string does not close on a line and the
>         // first non-whitespace character on the next line is " that line
>         // will be a contination of the string including the newline character
>         // (unless it is escaped). Interpolation and escapes process as before
>         // unless the first segment of the string is modified by the "e" 
> prefix.
> 
>         // The advantage of this format allows you to indent while giving
>         // you precise control of exactly what is going into the literal.
> 
>         let author = "Gambardella, Matthew"
> 
>         let xml = "<?xml version=\"1.0\"?>
>             "<catalog>
>             "   <book id=\"bk101\" empty=\"\">
>             "       <author>\(author)</author>
>             "       <title>XML Developer's Guide</title>
>             "       <genre>Computer</genre>
>             "       <price>44.95</price>
>             "       <publish_date>2000-10-01</publish_date>
>             "       <description>An in-depth look at creating applications 
> with XML.</description>
>             "   </book>
>             "</catalog>
>             ""
>         print(xml)
> 
>         // Perhaps, to avoid the zera crossing effect in text editors due to
>         // the unbalanced quotes, the continuation character could be "|".
>         // (newlines escaped with \ and blank lines are discarded.)
> 
>         assert( xml == "\
>             |<?xml version=\"1.0\"?>
>             |<catalog>
>             |   <book id=\"bk101\" empty=\"\">
>             |       <author>\(author)</author>
>             |       <title>XML Developer's Guide</title>
>             |       <genre>Computer</genre>
>             |       <price>44.95</price>
>             |       <publish_date>2000-10-01</publish_date>
>             |       <description>An in-depth look at creating \
>                             |applications with XML.</description>
> 
>             |   </book>
>             |</catalog>
>             |" )
> 
> 
>         // _""_ quoted strings also suppport these behaviours but don't 
> require
>         // escaping of embedded " characters. Think of them as a being 
> modifier
>         // on conventional string literals. They support continuation quotes.
> 
>         assert( xml == _"<?xml version="1.0"?>
>             "<catalog>
>             "   <book id="bk101" empty="">
>             "       <author>\(author)</author>
>             "       <title>XML Developer's Guide</title>
>             "       <genre>Computer</genre>
>             "       <price>44.95</price>
>             "       <publish_date>2000-10-01</publish_date>
>             "       <description>An in-depth look at creating applications 
> with XML.</description>
>             "   </book>
>             "</catalog>\n"_ )
> 
>         // _"strings"_ could allow newlines and replace """strings""" 
> discussed next
> 
>         assert( xml == _"<?xml version="1.0"?>
>             <catalog>
>                <book id="bk101" empty="">
>                    <author>\(author)</author>
>                    <title>XML Developer's Guide</title>
>                    <genre>Computer</genre>
>                    <price>44.95</price>
>                    <publish_date>2000-10-01</publish_date>
>                    <description>An in-depth look at creating applications 
> with XML.</description>
>                </book>
>             </catalog>
>             "_ )
> 
>         // The triple quoted strings can contain newlines and, unless 
> modified by "e"
>         // will process interpolations and not require escaping of ". To 
> allow indenting,
>         // any whitespace characters that preceed the closing """ will be 
> removed from 
>         // each line of the final literal. A warning is shown if lines do not 
> contain
>         // the exact same indentation characters. Any intial linefeed is also 
> removed.
> 
>         // The advantage of this format is the """ introducer works well when 
> syntax
>         // highlighting in external editors and github as quotes are always 
> balanced.
> 
>         assert( xml == """
>             <?xml version="1.0"?>
>             <catalog>
>                <book id="bk101" empty="">
>                    <author>\(author)</author>
>                    <title>XML Developer's Guide</title>
>                    <genre>Computer</genre>
>                    <price>44.95</price>
>                    <publish_date>2000-10-01</publish_date>
>                    <description>An in-depth look at creating applications 
> with XML.</description>
>                </book>
>             </catalog>
>             """ )
> 
>         assert( xml != e"""<?xml version="1.0"?>
>             <catalog>
>                <book id="bk101" empty="">
>                    <author>\(author)</author>
>                    <title>XML Developer's Guide</title>
>                    <genre>Computer</genre>
>                    <price>44.95</price>
>                    <publish_date>2000-10-01</publish_date>
>                    <description>An in-depth look at creating applications 
> with XML.</description>
>                </book>
>             </catalog>
>             """ )
> 
>         // heredoc syntax comes in two variants <<"TAG" and <<'TAG' 
> (non-escaping, "e" prefix)
>         // It applies the same indentation removal rules as does """. This 
> change has wider
>         // ramifications for the toolchain as compiler tokens are no longer 
> in file order
>         // and will take a while for a few problems to be ironed out. The 
> more consistent
>         // <<e"TAG" is a rather clumsy alternative to <<'TAG' for 
> non-escaping strings.
> 
>         // HEREDOC's advantage is that the literal no longer interrupts the 
> flow of your code.
> 
>         assert( (<<"XML" + <<"XML") == xml + xml )
>         <?xml version="1.0"?>
>         <catalog>
>            <book id="bk101" empty="">
>                <author>\(author)</author>
>                <title>XML Developer's Guide</title>
>                <genre>Computer</genre>
>                <price>44.95</price>
>                <publish_date>2000-10-01</publish_date>
>                <description>An in-depth look at creating applications with 
> XML.</description>
>            </book>
>         </catalog>
>         XML
>         <?xml version="1.0"?>
>         <catalog>
>            <book id="bk101" empty="">
>                <author>\(author)</author>
>                <title>XML Developer's Guide</title>
>                <genre>Computer</genre>
>                <price>44.95</price>
>                <publish_date>2000-10-01</publish_date>
>                <description>An in-depth look at creating applications with 
> XML.</description>
>            </book>
>         </catalog>
>         XML
> 
>         // For text you do not want to contain newlines, escape them using \
> 
>         print( <<"LOREM" )
>         Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do 
> eiusmod tempor incididunt \
>         ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis 
> nostrud exercitation ullamco \
>         laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure 
> dolor in reprehenderit in \
>         voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
> Excepteur sint occaecat cupidatat \
>         non proident, sunt in culpa qui officia deserunt mollit anim id est 
> laborum.\
>         LOREM
> 
> 
> 
> _______________________________________________
> 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