[swift-evolution] [Proposal] Safer half-open range operator

Vladimir.S svabox at gmail.com
Mon Apr 11 10:21:33 CDT 2016


+1 for the idea "in general". But I also think that explicit is better than 
implicit, especially if we deal with possible errors. Just like we work in 
Swift with integer overflow : '+' will generate run time error, but saying 
&+ we point Swift that we know what we do.

but.. what we'll have in case a[-1 &..< 5]? should this raise error or 
become [0 ..< 3] ? I think, the latter.

On 11.04.2016 17:02, Haravikk via swift-evolution wrote:
> I like the idea in theory, but the question is; is it really safer to
> return a result that the developer may not have wanted, versus an error
> indicating that a mistake may have been made? I wonder if perhaps there
> could be an alternative, such as a variation of the operator like so:
>
> let b = a [0 &..< 5]// Equivalent to let b = a[0 ..< min(5, a.endIndex)],
> becomes let b = a[0 ..< 3]
>
> I’m just not sure that we can assume that an array index out of range error
> is okay without some kind of indication from the developer, as otherwise we
> could end up returning a partial slice, which could end up causing an error
> elsewhere where the size of the slice is assumed to be 5 but isn’t.
>
>> On 11 Apr 2016, at 13:23, Luis Henrique B. Sousa via swift-evolution
>> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>
>> This proposal seeks to provide a safer ..< (aka half-open range operator)
>> in order to avoid **Array index out of range** errors in execution time.
>>
>> Here is my first draft for this proposal:
>> https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md
>>
>> In short, doing that in Swift causes a runtime error:
>>
>> leta =[1,2,3]
>> letb =a[0..<5]
>> print(b)
>>
>> > Error running code:
>> > fatal error: Array index out of range
>>
>> The proposed solution is to slice the array returning 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].
>> We can see this very behaviour in other languages, such as Python and
>> Ruby as shown in the proposal draft.
>>
>> This would eliminate the need for verifications on the array size before
>> slicing it -- and consequently runtime errors in cases when the
>> programmer didn't.
>>
>> Viewing that it is my very first proposal, any feedback will be helpful.
>>
>> Thanks!
>>
>> Luis Henrique Borges
>> @luishborges
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>


More information about the swift-evolution mailing list