[swift-evolution] Strings in Swift 4

Ted F.A. van Gaalen tedvgiosdev at gmail.com
Mon Feb 6 17:03:12 CST 2017


Thanks ..seeing now all this being heavily intertwined with external libs ICU etc.
then yes, too much effort for too little (making fixed width Unicode strings)
Why am i doing this?  Unicode is a wasp nest, how do you survive, Dave ? :o) 

But I do use “random string access" e.g. extracting substrings
with e.g.  let part = str[3..<6]  
with the help of the aforementioned String extension..

arrgh, great, make me a tea...

TedvG

> On 6 Feb 2017, at 23:25, Dave Abrahams <dabrahams at apple.com> wrote:
> 
> 
> on Mon Feb 06 2017, David Waite <david-AT-alkaline-solutions.com> wrote:
> 
>>> On Feb 6, 2017, at 10:26 AM, Ted F.A. van Gaalen via swift-evolution <swift-evolution at swift.org>
>> wrote:
>>> 
>>> Hi Dave,
>>> Oops! yes, you’re right!
>>> I did read again more thoroughly about Unicode 
>> 
>>> and how Unicode is handled within Swift...
>>> -should have done that before I write something- sorry.  
>>> 
>>> Nevertheless: 
>>> 
>>> How about this solution:  (if I am not making other omissions in my thinking again) 
>>> -Store the string as a collection of fixed-width 32 bit UTF-32 characters anyway.
>>> -however, if the Unicode character is a grapheme cluster (2..n Unicode characters),then 
>>> store a pointer to a hidden child string containing the actual grapheme cluster, like so:
>>> 
>>> 1: [UTF32, UTF32, UTF32, 1pointer,  UTF32, UTF32, 1pointer, UTF32, UTF32]
>>>                                                |                                          |
>>> 2:                               [UTF32, UTF32]                  [UTF32, UTF32, UTF32, ...]
>>> 
>>> whereby (1) is aString as seen by the programmer.
>>> and (2)  are hidden child strings, each containing a grapheme cluster. 
>> 
>> The random access would require a uniform layout, so a pointer and
>> scalar would need to be the same size. The above would work with a 32
>> bit platform with a tagged pointer, but would require a 64-bit slot
>> for pointers on 64-bit systems like macOS and iOS.
> 
> It would also make String not efficiently interoperable with almost any
> other system that processes strings including Foundation and ICU.
> 
>> Today when I need to do random access into a string, I convert it to
>> an Array<Character>. Hardly efficient memory-wise, but efficient
>> enough for random access.
> 
> I'd be willing to bet almost anything that you  never actually need to
> do random access into a String ;-)
> 
> -- 
> -Dave

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170207/bd9bfe5a/attachment.html>


More information about the swift-evolution mailing list