<div dir="ltr"><div class="gmail_extra"><div><div class="gmail_signature"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div style="font-size:small">As we have discussed throughout this thread, the initial proposal was modified to include alternative subscript methods instead of modifying the default operator/subscript behaviour. </div><div style="font-size:small">The first draft is here: <a href="https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md">https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md</a></div><div style="font-size:small"><br></div><div style="font-size:small">I&#39;ve also put this as a gist so that you can leave comments with respect to the proposal document itself. Any suggestion or help is very welcome.</div><div style="font-size:small"><a href="https://gist.github.com/luish/832c34ee913159f130d97a914810dbd8">https://gist.github.com/luish/832c34ee913159f130d97a914810dbd8</a></div><div style="font-size:small"><br></div><div style="font-size:small">Regards,</div><div><br>- Luis</div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Mon, Apr 11, 2016 at 1:23 PM, Luis Henrique B. Sousa <span dir="ltr">&lt;<a href="mailto:lshsousa@gmail.com" target="_blank">lshsousa@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">This proposal seeks to provide a safer <font face="monospace, monospace">..&lt;</font> (aka half-open range operator) in order to avoid **Array index out of range** errors in execution time.<br><br>Here is my first draft for this proposal: <a href="https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md" target="_blank">https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md</a><br><br>In short, doing that in Swift causes a runtime error:<div>
<p><font face="monospace, monospace"><span>let</span><span> a </span><span>=</span><span> [</span><span>1</span><span>,</span><span>2</span><span>,</span><span>3</span><span>]<br></span><span>let</span><span> b </span><span>=</span><span> a[</span><span>0</span><span>..&lt;</span><span>5</span><span>]<br></span><span>print</span><span>(b)</span></font></p>
<p><span>&gt; Error running code: <br></span>&gt; fatal error: Array index out of range</p>







<p><span>The proposed solution is to slice the array retur</span>ning all elements that are below the half-open operator, even though the number of elements is lesser than the ending of the half-open operator. So the example above would return [1,2,3]. <br>We can see this very behaviour in other languages, such as Python and Ruby as shown in the proposal draft.</p><p>This would eliminate the need for verifications on the array size before slicing it -- and consequently runtime errors in cases when the programmer didn&#39;t. <br><br>Viewing that it is my very first proposal, any feedback will be helpful.</p></div><div><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Thanks!</div><div></div><br></div><div>Luis Henrique Borges</div><div>@luishborges</div></div></div></div></div></div></div></div></div>
</div>
</blockquote></div><br></div></div>