[swift-evolution] Strings in Swift 4

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


> On 6 Feb 2017, at 19:10, 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.
> 
Yeah, I know that,  but the “grapheme cluster pool” I am imagining 
could be allocated at a certain predefined base address, 
whereby the pointer I am referring to is just an offset from this base address. 
If so, an address space of  2^30  (1,073,741,824) 1 GB, will be available,
which is more than sufficient for just storing unique grapheme clusters..    
(of course, not taking in account other allocations and app limitations) 
  
> 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.
> 
As a programmer. I just want to use String as-is but with  direct subscripting like str[12..<34]
and, if possible also with open range like so: str[12…]   
implemented natively in Swift. 

Kind Regards
TedvG
www.tedvg.com <http://www.tedvg.com/>
www.ravelnotes.com <http://www.ravelnotes.com/>
 
> -DW

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


More information about the swift-evolution mailing list