> On Nov 16, 2016, at 10:47 AM, David Sweeris via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> 
>> 
>> On Nov 16, 2016, at 9:25 AM, Karl via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> 
>>> On 14 Nov 2016, at 12:48, Haravikk via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>> I'm a +1 on the feature, though for simply handling symmetry it's not a 
>>> super critical issue.
>>> 
>>> 
>>> I wonder though, when you start looking at symmetry is it worth looking at 
>>> other patterns? For example, could symmetrical operators be covered by a 
>>> broader multi-part operator definition?
>>> 
>>> I was thinking recently it would be convenient if I could define say a 
>>> 3-dimensional point like so: <x, y, z>
>>> 
>>> In this case you're looking at a symmetric operator with two different 
>>> components (opening and closing angle brackets) with the ability to take 
>>> three arguments. Is there a way we could define and implement something 
>>> along these lines? If so it would be very flexible, and potential allow us 
>>> to unify all operators into a single format.
>>> 
>>> For example, you can thing of a prefix operator as being a leading symbol 
>>> plus one argument, while a postfix is one argument plus a trailing symbol, 
>>> a binary operator is an argument, a symbol and another argument, a 
>>> symmetric operator is a leading symbol, an argument and a trailing symbol 
>>> (doesn't have to be identical).
>>> 
>>> If we had a means of specifying operators in this way (as a complete 
>>> pattern) we could do away with special cases of operators entirely, though 
>>> they may be worth keeping for compatibility and as a shorthand.
>>> 
>>>> On 14 Nov 2016, at 09:57, Dimitri Racordon via swift-evolution 
>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>> 
>>>> +1
>>>> 
>>>> I think the use cases are not that sparse actually.
>>>> I would also argue that it would be easier to understand the intent of the 
>>>> code with some sort of keyword than with a hard copy of each function.
>>>> 
>>>> 
>>>> 
>>>>> On 14 Nov 2016, at 10:51, Anton Zhilin via swift-evolution 
>>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>>> 
>>>>> -1
>>>>> Not worth adding syntactic sugar for a narrow use case. Plus it's an 
>>>>> additive feature.
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> [email protected] <mailto:[email protected]>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> 
>> Commutative operators are very common and I would definitely +1 a shorthand 
>> for them.
>> 
>> You seem to be talking about a custom literal, rather than an operator - you 
>> said you want to “define” a point with some special syntax. Try 
>> ArrayLiteralConvertible.
> 
> The problem is there’s no way to conform to ArrayLiteralConvertible only when 
> a certain # of elements are present, and the protocol requires the init 
> function to not be failable. In this particular case you can fake it by only 
> copying the first 3 values from the array and using 0 to fill in missing 
> elements. It could be argued that filling in the 0s is “correct enough”, but 
> throwing out extra elements is certainly bad. And you’re still in the 
> (undesirable, IMHO) position of using run-time checks to account for what 
> amounts to a syntax error that should be easy to catch at compile-time.

You can make it a precondition that the array have the right number of 
elements; this is what the simd module types on Apple platforms do, for example:

        1> import simd
        2> let w = [1,2,3,4] as float3
        fatal error: float3 requires a three-element array

but you're still left with a run-time error rather than a syntax-error, which 
is definitely not ideal.

– Steve

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to