I think it quite some overcomplicates the situation. I would prefer: 1. Distinct multiline strings, (e.g. not " but rather """) 2. We could use something like this for precision: let mys1 = """my" "multiline" "string""" // equivalent to "mymultilinestring"
let mys2 = """my multiline string""" // equivalent to "my\nmultiline\nstring" This looks simpler to me, still you can do everything with it. On Mon, 3 Apr 2017 at 15:36 Adrian Zubarev <adrian.zuba...@devandartist.com> wrote: > I don’t really think this is about how to indicate a multi-lined string, > where the string starts and ends with something like ", ' or """ is > trivial to me. It’s just a decision to make. However the main debate I see > with that topic is the ambiguity from the readers perspective. > > In your example I assume you want a result to match this: “my multiline > string”, but what if you need precision? Should we really fallback to > single line string then? What if you want to print some XML file with all > it’s indent calculated with whitespaces rather than tabs? The multiline > version like that won’t work, and if your string is huge you’ll end up at a > place where we already are. This doesn’t solve the main then because we > could otherwise simply allow this today: > > let string = "my > multiline > string" > > I’m only speaking for my personal preference, others might see it > completely different. However I’m totally sure multiline strings solve more > than simply being able to write them so that the compiler is satisfied. > > As a compromise for everyone we possibly could come up with a way which > serves both, simplicity and precision. > > For the next bikeshedding example I’m going to use ' for multi-lined > strings: > > // Simplicity which supports indent but at a cost of no > // leading or trailing space characters > let string1 = 'my > multiline > string' > > print(string1) // prints "mymultilinestring" > > let string2 = 'my \ > multiline \ > string' > > // Trailing precision > print(string2) // prints "my multiline string" > > let string3 = 'my > ' multiline > ' string' > > // Leading precision > print(string3) // prints "my multiline string" > > let string4 = 'my \ > ' multiline \ > ' string' > > // Leading and trailing precision > print(string4) // prints "my multiline string" (Note: 2x two whitespaces) > > let string5 = 'my\ > 'multiline\ > 'string' > > // Leading and trailing precision > // Provide a fix-it to remove some `\` and `'` characters > // because it equals `string1` > print(string5) // prints "mymultilinestring" > > let string6 = 'my \ > 'multiline \ > 'string' > > // Leading and trailing precision > // Provide a fix-it to remove some `'` characters > // because it equals `string2` > print(string6) // prints "my multiline string" > > let string7 = 'my\ > ' multiline\ > ' string' > > // Leading and trailing precision > // Provide a fix-it to remove some `\` characters > // because it equals `string3` > print(string7) // prints "my multiline string" > > Comments should be only allowed after the escaping character. string1 can > only have comments after the last line of that string. > > I think a model like this could have the best from both worlds. > ------------------------------ > > Personally I dislike the idea of """ and would rather want a model from > above with " and \ or as written. > > > > -- > Adrian Zubarev > Sent with Airmail > > Am 3. April 2017 um 11:56:12, Daniel Leping (dan...@crossroadlabs.xyz) > schrieb: > > What about """ notation? > > It could become something like: > let mys = """my > multiline > string""" > > On Mon, 3 Apr 2017 at 12:35 Adrian Zubarev via swift-evolution < > swift-evolution@swift.org> wrote: > > Simply because it’s always a zero to n space characters at the start of > the line and at its end. You cannot predict the need of every multi-line > string. > > I don’t disagree that typing out some extra " and \ is tedious, but what > I really like about it is, it’s precise. > > let string = > "Hello \ // Three trailing space characters > "Swift\ > " 4.0" // Three leading space characters > > print(string) // prints: "Hello___Swift___4.0" where _ ist a space character > > > > -- > Adrian Zubarev > Sent with Airmail > > Am 3. April 2017 um 11:27:58, Charlie Monroe (char...@charliemonroe.net) > schrieb: > > Yes, but with ", you need to escape " occurrences - which is a fairly > common character - I'd say more common than |. > > The trailing whitespace - why can't it just be included in the string > automatically? Just for supporting comments? > > On Apr 3, 2017, at 11:19 AM, Adrian Zubarev < > adrian.zuba...@devandartist.com> wrote: > > This is almost the same as proposed, but we use " instead of |, however > you still don’t have trailing space characters covered like this. > > > > -- > Adrian Zubarev > Sent with Airmail > > Am 3. April 2017 um 11:16:41, Charlie Monroe (char...@charliemonroe.net) > schrieb: > > You can. I wish I remembered the language this was in (not sure if it's in > Scala), but you can do something like: > > let xml = ''' > |<?xml version="1.0"?> > |<catalog> > | <...> > |</catalog> > ''' > > This way, if you care about the leading whitespace, you define the line > beginning using "|". > > Two characters aren't harmful, but in my experience when working with HTML > strings, etc. the quote-escaping is extremely tedious. > > On Apr 3, 2017, at 11:06 AM, Adrian Zubarev < > adrian.zuba...@devandartist.com> wrote: > > My main concern with this approach is that you don’t have any control > about indent and you loose pre- and post spacing characters. > > A concatenating approach is a little tedious but it’s precise. In any > situation a multi-lined string is not softly wrapped string, which implies > that you will have to press enter for each new line you wish to have. IMHO > adding two more characters for each line isn’t that harmful. ;-) > > > > -- > Adrian Zubarev > Sent with Airmail > > Am 3. April 2017 um 10:49:02, Charlie Monroe (char...@charliemonroe.net) > schrieb: > > While I long for multiline string literals, I'd also very like to see a > different syntax as in many cases, these can be XML/HTML snippets and the > use of quotes is ubiqituous. I'd very much like to see a variant where you > can simply paste almost any string without escaping it. > > For example, Scala uses a tripple-quote syntax... As we've gotten rid of ' > for character literals, we could use it for multiline strings? > > Or possibly tripple-apostrophe for multiline strings? > > let xml = ''' > <?xml version="1.0"?> > <catalog/> > ''' > > > On Apr 3, 2017, at 9:01 AM, Adrian Zubarev via swift-evolution < > swift-evolution@swift.org> wrote: > > Hello Swift community, > > on Github there is a PR for this proposal, but I couldn’t find any up to > date thread, so I’m going to start by replying to the last message I found, > without the last content. > > I really like where this proposal is going, and my personal preference are > *continuation quotes*. However the proposed solution is still not perfect > enough for me, because it still lacks of precise control about the trailing > space characters in each line of a multi-line string. > > Proposed version looks 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> > "" > > I would like to pitch an enhancement to fix the last tiny part by adding > the escaping character ‘' to the end of each line from 1 to (n - 1) of the > n-lined string. This is similar to what Javascript allows us to do, except > that we also have precise control about the leading space character through > ’"’. > > The proposed version will become this: > > let xml = "<?xml version=\"1.0\"?>\ > "<catalog>\ // If you need you can comment here > " <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>\ > "" > > Here is another example: > > let multilineString: String = "123__456__\ // indicates there is another part > of the string on the next line > "__789_____\ // aways starts with `"` and ends > with either `\` or `"` > "_____0_" // precise control about pre- and > post-space-characters > > let otherString = "\(someInstance)\ /* only comments are allowed in between > */ "text \(someOtherInstance) text" > > This is simply *continuation quotes* combined with *backslash > concatenation*. > > > > > -- > Adrian Zubarev > Sent with Airmail > > > _______________________________________________ > 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 > >
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution