<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Did you consider making the safer, optional overload the "default" and just omit the label?<br><br>Sent from my iPad</div><div><br>On May 6, 2016, at 10:23 AM, Luis Henrique B. Sousa via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr"><div><span style="font-size:12.8px">"bounded" sounds good to me, but I</span>&nbsp;don't know if "optional" is a good choice as it could be highlighted as a reserved keyword:</div><div><br></div><div><div><a href="https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md#detailed-design">https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md#detailed-design</a><br></div></div><div><br></div><div class="gmail_extra"><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">- Luis</div></div></div></div></div></div></div></div></div><div class="gmail_extra"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Fri, Apr 29, 2016 at 5:08 PM, Vladimir.S 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">From my point of view,<br>
truncate -&gt; bounded<br>
lenient -&gt; keep "lenient:" ? "requested:" ? "optional:"?<span class=""><br>
<br>
On 29.04.2016 17:46, Thorsten Seitz wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
Some alternatives to 'safe:'<br>
<br>
existing:<br>
bounded:<br>
valid:<br>
<br>
-Thorsten<br>
<br>
Am 29.04.2016 um 00:20 schrieb Luis Henrique B. Sousa via swift-evolution<br></span>
&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a> &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;&gt;:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
Thanks Vladimir, your considerations and suggestions are totally valid,<br>
I'm going to change the document accordingly.<br>
Also as a non-native English speaker I think that other words could fit<br>
better, such as 'tolerant' or 'permissive' -- but I dunno if they would<br>
look great as a label. We will come up with the right keyword for it.<br>
<br>
In relation to bad code, it could be a valid argument if my initial<br>
proposal was under discussion instead, where the default 'fail fast'<br>
behaviour would be "camouflaged" and bugs would be more difficult to<br>
catch. In this new proposal we have such features explicitly defined,<br>
where the user will be familiar with what it does and what results to<br>
expect for. I don't see a way that it could drive to bad written code.<br>
<br>
- Luis<br>
<br>
On Thu, Apr 28, 2016 at 2:37 PM, Vladimir.S &lt;<a href="mailto:svabox@gmail.com" target="_blank">svabox@gmail.com</a><br></span><div><div class="h5">
&lt;mailto:<a href="mailto:svabox@gmail.com" target="_blank">svabox@gmail.com</a>&gt;&gt; wrote:<br>
<br>
&nbsp; &nbsp; I support this proposal. Probably we all should select the best<br>
&nbsp; &nbsp; labels (truncate/lenient or other). As not native English speaker, I<br>
&nbsp; &nbsp; don't feel like 'lenient' is well-known word or often-used word in<br>
&nbsp; &nbsp; software development. But all this just a details we need to discuss.<br>
<br>
&nbsp; &nbsp; What I think could be improved - is a motivation section. IMO the<br>
&nbsp; &nbsp; main purpose of proposed features is not to "eliminate the need for<br>
&nbsp; &nbsp; validations, reduce the number of fatal errors in runtime" but to<br>
&nbsp; &nbsp; allow us to have more clean code when *such validations just don't<br>
&nbsp; &nbsp; required*, when we just *don't care* about details.<br>
&nbsp; &nbsp; I.e. in situations, when we'll use [max(-1, a.startIndex) ..&lt; min(5,<br>
&nbsp; &nbsp; a.endIndex)] and bounds checking manually to have the same result as<br>
&nbsp; &nbsp; in proposed subscripts.<br>
<br>
&nbsp; &nbsp; I.e. it is just a very handy addition to standard methods for<br>
&nbsp; &nbsp; collections, just like we can get first element by index but we have<br>
&nbsp; &nbsp; handy property '.first' for this purpose. Btw, it does not raise<br>
&nbsp; &nbsp; error, but returns T?. I think you can add notes regarding analogues<br>
&nbsp; &nbsp; with .first / .last properties(and probably with other) in proposal text.<br>
<br>
&nbsp; &nbsp; Someone can argue, that by using these subscripts, coders can write<br>
&nbsp; &nbsp; 'bad' code - but I can't accept such an argument - 'bad' coders<br>
&nbsp; &nbsp; already can write 'bad' code with other features of Swift and at the<br>
&nbsp; &nbsp; end they can implement these subscripts in their project and write<br>
&nbsp; &nbsp; 'bad' code. Should we stop to introduce handy and explicit feature<br>
&nbsp; &nbsp; for 'good' coders because of this?<br>
<br>
&nbsp; &nbsp; On 28.04.2016 15:11, Luis Henrique B. Sousa via swift-evolution wrote:<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; As we have discussed throughout this thread, the initial proposal was<br>
&nbsp; &nbsp; &nbsp; &nbsp; modified to include alternative subscript methods instead of<br>
&nbsp; &nbsp; &nbsp; &nbsp; modifying the<br>
&nbsp; &nbsp; &nbsp; &nbsp; default operator/subscript behaviour.<br>
&nbsp; &nbsp; &nbsp; &nbsp; The first draft is<br>
&nbsp; &nbsp; &nbsp; &nbsp; here:<br>
&nbsp; &nbsp; &nbsp; &nbsp; <a href="https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md" rel="noreferrer" target="_blank">https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md</a><br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; I've also put this as a gist so that you can leave comments with<br>
&nbsp; &nbsp; &nbsp; &nbsp; respect to<br>
&nbsp; &nbsp; &nbsp; &nbsp; the proposal document itself. Any suggestion or help is very welcome.<br>
&nbsp; &nbsp; &nbsp; &nbsp; <a href="https://gist.github.com/luish/832c34ee913159f130d97a914810dbd8" rel="noreferrer" target="_blank">https://gist.github.com/luish/832c34ee913159f130d97a914810dbd8</a><br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; Regards,<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; - Luis<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; On Mon, Apr 11, 2016 at 1:23 PM, Luis Henrique B. Sousa<br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;<a href="mailto:lshsousa@gmail.com" target="_blank">lshsousa@gmail.com</a> &lt;mailto:<a href="mailto:lshsousa@gmail.com" target="_blank">lshsousa@gmail.com</a>&gt;<br></div></div><div><div class="h5">
&nbsp; &nbsp; &nbsp; &nbsp; &lt;mailto:<a href="mailto:lshsousa@gmail.com" target="_blank">lshsousa@gmail.com</a> &lt;mailto:<a href="mailto:lshsousa@gmail.com" target="_blank">lshsousa@gmail.com</a>&gt;&gt;&gt; wrote:<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This proposal seeks to provide a safer ..&lt; (aka half-open range<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operator) in order to avoid **Array index out of range**<br>
&nbsp; &nbsp; &nbsp; &nbsp; errors in<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; execution time.<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Here is my first draft for this proposal:<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; <a href="https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md" rel="noreferrer" target="_blank">https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md</a><br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; In short, doing that in Swift causes a runtime error:<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; leta =[1,2,3]<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; letb =a[0..&lt;5]<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(b)<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &gt; Error running code:<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &gt; fatal error: Array index out of range<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The proposed solution is to slice the array returning all<br>
&nbsp; &nbsp; &nbsp; &nbsp; elements that<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; are below the half-open operator, even though the number of<br>
&nbsp; &nbsp; &nbsp; &nbsp; elements is<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lesser than the ending of the half-open operator. So the<br>
&nbsp; &nbsp; &nbsp; &nbsp; example above<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; would return [1,2,3].<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; We can see this very behaviour in other languages, such as<br>
&nbsp; &nbsp; &nbsp; &nbsp; Python and<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ruby as shown in the proposal draft.<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This would eliminate the need for verifications on the array size<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; before slicing it -- and consequently runtime errors in cases<br>
&nbsp; &nbsp; &nbsp; &nbsp; when the<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; programmer didn't.<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Viewing that it is my very first proposal, any feedback will<br>
&nbsp; &nbsp; &nbsp; &nbsp; be helpful.<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thanks!<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Luis Henrique Borges<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @luishborges<br>
<br>
<br>
<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; _______________________________________________<br>
&nbsp; &nbsp; &nbsp; &nbsp; swift-evolution mailing list<br></div></div>
&nbsp; &nbsp; &nbsp; &nbsp; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a> &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;<span class=""><br>
&nbsp; &nbsp; &nbsp; &nbsp; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
</span><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a> &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;<br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></blockquote><div class="HOEnZb"><div class="h5">
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div></div></blockquote></div><br></div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></body></html>