>> On Dec 14, 2015, at 9:42 PM, Chris Lattner via swift-dev 
>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

>> There are two defensible models here:
>> 
>> 1) comments should be treated as whitespace.
>> 2) comments should be treated as if they were not present.
>> 
>> The later model seems more ideal to me (because you can put whitespace on 
>> either side of the comment after all), but I don’t have a strong opinion 
>> about that.  What do others think?

> 
> On Dec 15, 2015, at 1:08 AM, John Calsbeek via swift-dev 
> <swift-dev@swift.org> wrote:
> 
> If you treat comments as though they are not present, you can no longer 
> reason locally about whitespace on either side of an operator. Straw example:
> 
> foo/* insert an
> excerpt from War
> and Peace here */!
> 
> I need to scan to the other side of the comment to determine if ! is preceded 
> by whitespace.
> 
> There is already a list of situations in which some token is treated as 
> whitespace for the purpose of operators in The Swift Programming Language:
> 
> For the purposes of these rules, the characters (, [, and { before an 
> operator, the characters ), ], and } after an operator, and the characters ,, 
> ;, and : are also considered whitespace.
> 
> There is one caveat to the rules above. If the ! or ? predefined operator has 
> no whitespace on the left, it is treated as a postfix operator, regardless of 
> whether it has whitespace on the right. To use the ? as the optional-chaining 
> operator, it must not have whitespace on the left. To use it in the ternary 
> conditional (? :) operator, it must have whitespace around both sides.
> 
> Given that, it seems more natural to me to define comments as 
> “treated-as-whitespace” in the same way.
> 
> “Treated as not present” is also not quite the right way to word the opposite 
> case, since comments would still separate tokens. Say you had an automated 
> tool that deletes comments (perhaps unlikely, but let’s roll with it). 
> “Treated as not present” says you should completely delete the comment, but 
> that doesn’t actually work since it could still cause two separate tokens to 
> be glued together. “Treated as whitespace” just means that you have to 
> replace the comment with at least one character of whitespace.

FWIW, I agree with John about this. I think either model is reasonable but 
treating comments as whitespace is better because:

* The Swift language reference already states the general rule that comments 
are whitespace; I think it’s better to apply this throughout than change it.

* I think it’s easier to explain that "comments are whitespace" than "comments 
are treated as not present except they separate tokens”.

* The non-local effects John describes are mildly awkward for human readers and 
in the lexer. (I think we’d have to walk backwards through slash-star comments 
to determine if we have space to the left of an operator.)

- Jesse


_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to