Sent from my iPad

> On Jan 22, 2017, at 3:31 PM, Chris Lattner <[email protected]> wrote:
> 
> 
>> On Jan 20, 2017, at 2:23 PM, Jonathan Hull via swift-evolution 
>> <[email protected]> wrote:
>> 
>>>> 
>>>> Still digesting, but I definitely support the goal of string processing 
>>>> even better than Perl.  Some random thoughts:
>>>> 
>>>> • I also like the suggestion of implicit conversion from substring slices 
>>>> to strings based on a subtype relationship, since I keep running into that 
>>>> issue when trying to use array slices.  
>>> 
>>> Interesting.  Could you offer some examples?
>> 
>> Nothing catastrophic.  Mainly just having to wrap all of my slices in 
>> Array() to actually use them, which obfuscates the purpose of my code. It 
>> also took me an embarrassingly long time to figure out that was what I had 
>> to do to make it work.  For the longest time, I couldn’t understand why 
>> anyone would use slices because I couldn’t actually use them with any API… 
>> and then someone mentioned wrapping it in Array() here on Evolution and I 
>> finally got it.  
> 
> I agree that it is important to make String[Slice] and Array[Slice] 
> consistent.  If there is an implicit conversion for one, it makes sense for 
> their to be an implicit conversion for the other.
> 
> That said, an implicit conversion here is something that we need to consider 
> very carefully.  Adding them would definitely increase programmer convenience 
> in some cases, but it comes with two potentially serious costs:
> 
> 1) The conversion from a slice to a container is a copying and O(n) memory 
> allocating operation.  Swift tends to prefer keeping these sorts of 
> operations explicit, in order to make it easier to reason about performance 
> of code.  For example, if you are forced to write:
> 
>    let x = … something that returns a slice.
>    foo(String(x))
>    foo(String(x))
> 
> then you’re likely to notice the fact that you’re doing two expensive 
> operations, which are redundant.  If the conversion is implicit, you’d never 
> notice.  Also, the best solution may not be to create a single local 
> temporary, it might actually be to change “foo” to take a slice.

For completeness only, I should point out that we already have this situation 
with implicit conversion of Array<T> to Array<T?>.

> 2) Implicit conversions like this are known to slow down the type checker, 
> sometimes substantially.  I know that there are improvements planned, but 
> this is exactly the sort of thing that increases the search space the 
> constraint solver needs to evaluate, and it is already exponential.  This 
> sort of issue is the root cause of the embarrassing “expression too complex” 
> errors.
> 
> -Chris
> 
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to