Ok, appending was a dumb example (It has been a long week). Imagine the same idea with insert/remove…
Thanks, Jon > On Feb 10, 2017, at 5:49 PM, Jonathan Hull via swift-evolution > <swift-evolution@swift.org> wrote: > > This is the biggest need I have from strings (and collections) that is not > being met, and is I think why people reach for integers. I have a stored > index which points to something important, and if the string/collection is > edited, I now have to update the index to be correct. Lots of chances to > screw up (e.g. off by 1 errors) if I am not super careful. > > I would much rather have that dealt with by the string/collection itself, so > that I can think about my larger project instead of keeping everything in > sync. > > My preferred design for this would be to have two types of index. An internal > index (what we have now) which is fast, efficient and transient, and a stable > index which will always point to the same item despite having added or > removed other items (or be testably invalid if the item pointed to has been > removed). For strings, this means the stable index would point to the same > characters even if the string has been edited (as long as those characters > are still there). > > I know the second isn’t useful for algorithms in the standard library, but it > is sooooo useful for things like storing user selections… and it is very easy > to foot-gun when trying to do it yourself. Keeping stored indexes in sync is > among my top annoyances while programming. > > An easier to implement, but slightly less useful approach, would be to have > methods which take an array of indexes along with the proposed change, and > then it adjusts the indexes (or replaces them with nil if they are invalid) > as it makes the update. For example: > > func append(_ element:Element, adjusting: [Index]) -> [Index?] > func appending(_ element:Element, adjusting: [Index]) -> (Self, > [Index?]) > > Thanks, > Jon > > >> On Feb 9, 2017, at 3:45 PM, Hooman Mehr via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> >>> On Feb 9, 2017, at 3:11 PM, Dave Abrahams <dabrah...@apple.com >>> <mailto:dabrah...@apple.com>> wrote: >>> >>> >>> on Thu Feb 09 2017, "Ted F.A. van Gaalen" <tedvgiosdev-AT-gmail.com >>> <http://tedvgiosdev-at-gmail.com/>> wrote: >>> >>>> Hello Shawn >>>> Just google with any programming language name and “string manipulation” >>>> and you have enough reading for a week or so :o) >>>> TedvG >>> >>> That truly doesn't answer the question. It's not, “why do people index >>> strings with integers when that's the only tool they are given for >>> decomposing strings?” It's, “what do you have to do with strings that's >>> hard in Swift *because* you can't index them with integers?” >> >> I have done some string processing. I have not encountered any algorithm >> where an integer index is absolutely needed, but sometimes it might be the >> most convenient. >> >> For example, there are valid reasons to keep side tables that hold indexes >> into a string. (such as maintaining attributes that apply to a substring or >> things like pre-computed positions of soft line breaks). It does not require >> the index to be integer, but maintaining validity of those indexes after the >> string is mutated requires being able to offset them back or forth from some >> position on. These operations could be less verbose and easier if the index >> happens to be integer or (efficiently) supports + - operators. Also, I know >> there are other methods to deal with such things and mutating a large string >> generally is a bad idea, but sometimes it is the easiest and most convenient >> solution to the problem at hand. >> >> >>> >>>>> On 9 Feb 2017, at 16:48, Shawn Erickson <shaw...@gmail.com >>>>> <mailto:shaw...@gmail.com>> wrote: >>>>> >>>>> I also wonder what folks are actually doing that require indexing >>>>> into strings. I would love to see some real world examples of what >>>>> and why indexing into a string is needed. Who is the end consumer of >>>>> that string, etc. >>>>> >>>>> Do folks have so examples? >>>>> >>>>> -Shawn >>>>> >>>>> On Thu, Feb 9, 2017 at 6:56 AM Ted F.A. van Gaalen via swift-evolution >>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>>>> <mailto:swift-evolution@swift.org <mailto:swift-evolution@swift.org>>> >>>>> wrote: >>>>> Hello Hooman >>>>> That invalidates my assumptions, thanks for evaluating >>>>> it's more complex than I thought. >>>>> Kind Regards >>>>> Ted >>>>> >>>>>> On 8 Feb 2017, at 00:07, Hooman Mehr <hoo...@mac.com >>>>>> <mailto:hoo...@mac.com> <mailto:hoo...@mac.com <mailto:hoo...@mac.com>>> >>>>>> wrote: >>>>>> >>>>>> >>>>>>> On Feb 7, 2017, at 12:19 PM, Ted F.A. van Gaalen via swift-evolution >>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>>>>>> <mailto:swift-evolution@swift.org <mailto:swift-evolution@swift.org>>> >>>>>>> wrote: >>>>>>> >>>>>>> I now assume that: >>>>>>> 1. -= a “plain” Unicode character (codepoint?) can result in one >>>>>>> glyph.=- >>>>>> >>>>>> What do you mean by “plain”? Characters in some Unicode scripts are >>>>>> by no means “plain”. They can affect (and be affected by) the >>>>>> characters around them, they can cause glyphs around them to >>>>>> rearrange or combine (like ligatures) or their visual >>>>>> representation (glyph) may float in the same space as an adjacent >>>>>> glyph (and seem to be part of the “host” glyph), etc. So, the >>>>>> general relationship of a character and its corresponding glyph (if >>>>>> there is one) is complex and depends on context and surroundings >>>>>> characters. >>>>>> >>>>>>> 2. -= a grapheme cluster always results in just a single glyph, >>>>>>> true? =- >>>>>> >>>>>> False >>>>>> >>>>>>> 3. The only thing that I can see on screen or print are glyphs >>>>>>> (“carvings”,visual elements that stand on their own ) >>>>>> >>>>>> The visible effect might not be a visual shape. It may be for example, >>>>>> the way the surrounding shapes change or re-arrange. >>>>>> >>>>>>> 4. In this context, a glyph is a humanly recognisable visual form >>>>>>> of a character, >>>>>> >>>>>> Not in a straightforward one to one fashion, not even in Latin / Roman >>>>>> script. >>>>>> >>>>>>> 5. On this level (the glyph, what I can see as a user) it is not >>>>>>> relevant and also not detectable >>>>>>> with how many Unicode scalars (codepoints ?), grapheme, or even >>>>>>> on what kind >>>>>>> of encoding the glyph was based upon. >>>>>> >>>>>> False >>>>>> >>>>> >>>>> _______________________________________________ >>>>> swift-evolution mailing list >>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>>>> <mailto:swift-evolution@swift.org <mailto:swift-evolution@swift.org>> >>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >>>> <https://lists.swift.org/mailman/listinfo/swift-evolution >>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>> >>>> >>> >>> -- >>> -Dave >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto: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