[swift-evolution] A path forward on rationalizing unicode identifiers and operators

Alex Blewitt alblue at apple.com
Wed Oct 4 08:12:22 CDT 2017


> On 4 Oct 2017, at 13:55, Mike Kluev <mike.kluev at gmail.com> wrote:
> 
> On 4 October 2017 at 13:41, Alex Blewitt <alblue at apple.com <mailto:alblue at apple.com>> wrote:
>> On 4 Oct 2017, at 11:42, Mike Kluev via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> speaking of &&, was it just a copy-paste from C or is there a more fundamental reason to use that instead of &? in C they had to use two different operators because of the implicit int <-> bool promotions, but in swift "true & false" vs "1 & 2" would have been distinguishable.
> 
> The difference between the & and && operators isn't to do with the implicit conversions; it's to do with whether both sides of the expression are evaluated or not.
> 
> false && system('rm -rf')
> 
> You really don't want to do that if both sides are executed ...
> 
> true. however what would stop the hypothetical "logical &" operator to not evaluate the right hand side if the left 
> side is false similar to how && behaves? yes, it would make it more different to the "bitwise &" operator, but they are
> already a bit different.

Whether you are dealing with boolean/int types and whether you short-circuit the operators are orthogonal concerns.

> (it was always backwards to me even in C: bitwise *single* & is for and-ing *multiple* bit pairs, whilst a
> *multi-character* && is for and-ing a single bool pair.)

The && (c.f. ||) is explicitly for short-circuiting and is nothing to do with bit pairs or booleans, by specification.

See e.g. section 6.5.13 and 6.5.14.

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

Alex
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171004/27f2d22e/attachment.html>


More information about the swift-evolution mailing list