[swift-evolution] [Pitch] Allow numerical keywords in member references
Slava Pestov
spestov at apple.com
Thu Mar 9 01:41:08 CST 2017
> On Mar 8, 2017, at 11:33 PM, Adrian Zubarev via swift-evolution <swift-evolution at swift.org> wrote:
>
> I forget to mention, this should be also valid:
>
> let `42` = 42
>
> print(`42`)
>
> struct A {
> let `0` = 0
> }
>
> let number = A().0
>
-1
This seems really confusing.
extension Int { var `0`: Int { return 0 } }
3.0 // is this a float literal?
3 .0 // member access?
.0 // this is actually a contextual member access, and not a literal ‘0.0’?
I’d prefer if .0, .1, … were reserved for tuple fields; .0 is already not very descriptive, but at the very least if you see it in source code you know you have a tuple type and not something else.
Also the compiler’s name mangling relies on the fact that identifiers never begin with a numeric character or symbol.
Can you give a motivating example where allowing an identifier to start with a number actually helps readability?
Slava
>
>
> --
> Adrian Zubarev
> Sent with Airmail
>
> Am 9. März 2017 um 08:24:54, Adrian Zubarev (adrian.zubarev at devandartist.com <mailto:adrian.zubarev at devandartist.com>) schrieb:
>
>> Hi Swift community, I’d like to pitch this idea again.
>>
>> Swift already has the pitched feature, but it is exclusive for tuples only. SE–0071 allowed the use of keywords after the . in a member access, except for those keywords that have special meaning by using back-ticks. However, members starting with numbers are not special keywords and as already mentioned, numerical members are already allowed in tuples.
>>
>> I propose to extend that capability to the whole language and make that behavior consistent. To disambiguate members starting with a number one would need to use back-ticks.
>>
>> // Enum
>> enum ErrorCode : String {
>>
>> case `2345` = "my description for 2345"
>> case `123a` = "my description for 123a"
>> case `123b` = "my description for 123b"
>> }
>>
>> let code = ErrorCode.2345
>>
>> // Function
>> func `42foo`(label: Type, `12345`: Type, `0987something`: Type) { … }
>>
>> // Tuple
>> (`1`: Int, `2`: Int)
>> My question is: would that be in scope for Swift 4?
>>
>>
>>
>> --
>> Adrian Zubarev
>> Sent with Airmail
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170308/4154a4ab/attachment.html>
More information about the swift-evolution
mailing list