<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jan 4, 2016 at 9:37 PM, Kevin Ballard via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>




<div><div>I agree in principle that it would be great if String could enforce that it&#39;s always valid.<br></div>
<div> </div>
<div>But unfortunately, in practice, there&#39;s no way to do that without making it expensive to bridge from Obj-C. Because, as you&#39;ve demonstrated, you can create NSStrings that contain things that aren&#39;t actually valid unicode sequences, every single bridge from an NSString to a String would have to be checked for validity. Not only that, but it&#39;s not clear what the behavior would be if an invalid string is found, since these bridges are unconditional - would Swift panic? Would it silently replace the invalid sequence with U+FFFD? Or something else entirely? But the question doesn&#39;t really matter, because turning these bridges from O(1) into O(N) would be an unacceptable performance penalty anyway.</div></div></blockquote><div><br></div><div>Currently String replaces invalid sequences with U+FFFD lazily during access, but there are corner cases related to Objective-C bridging that can still leak invalid Unicode.</div><div><br></div><div>Dmitri</div></div><div><br></div>-- <br><div class="gmail_signature">main(i,j){for(i=2;;i++){for(j=2;j&lt;i;j++){if(!(i%j)){j=0;break;}}if<br>(j){printf(&quot;%d\n&quot;,i);}}} /*Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>&gt;*/</div>
</div></div>