&gt; Because strings are arrays, we use array indexes to slice strings<p>But that&#x27;s a choice and not the only one. Sure you&#x27;re likely to implement your Unicode string as an array of some type. But that doesn&#x27;t mean that the only sensible approach is to expose that array directly to the user. Or more specifically as the primary interface.<p>For my money, Swift has probably the most comprehensive Unicode string API I&#x27;ve seen [0]. What they do is, essentially, have an opaque String type but support various &quot;views&quot; as properties. The main view is called .characters and represents a collection of grapheme clusters. They also have properties that present Unicode scalars, utf8 encoding etc.<p>Their API is complex, no question. But then proper handling of Unicode is complex. But it does show that there are other options than simply exposing the Unicode scalars.<p>BTW to your point on len(x) + len(y). The answer is 2 if you define len() on Unicode scalars but 1 if you define it on characters. Why? because len(&quot;\u301&quot;) should be 0. It&#x27;s not a character, it&#x27;s a base modifier. It is, of course, true that getting this right is likely to be substantially more expensive than getting it wrong but that doesn&#x27;t mean it can&#x27;t be done.<p>[0] <a href="https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;ios&#x2F;documentation&#x2F;Swift&#x2F;Conceptual&#x2F;Swift_Programming_Language&#x2F;StringsAndCharacters.html" rel="nofollow">https:&#x2F;&#x2F;developer.apple.com&#x2F;library&#x2F;ios&#x2F;documentation&#x2F;Swift&#x2F;...</a>