> On Sep 6, 2017, at 9:52 PM, Slava Pestov <spes...@apple.com> wrote:
> 
>> On Sep 6, 2017, at 7:57 PM, Brent Royal-Gordon via swift-dev 
>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>> 
>> This is going against the grain, but I think we should order by name and 
>> therefore allow reordering, but not renaming. If an API is public, renaming 
>> is obviously going to be source-breaking and could easily be ABI-breaking; I 
>> don't think it's that hard to explain that renaming can also be ABI-breaking 
>> when you've declared your type's layout is part of your module's ABI.
> 
> However, @fixedContents structs can also contain private stored properties. 
> Renaming a private property is not source-breaking (but if we sort by name 
> when performing layout, it will be ABI breaking).

I understand that. I think this is explicable if you think of `@fixedContents` 
as intentionally compromising the privacy of private stored properties. And I 
think that attaching this feature to the `public` keyword would help to 
encourage that mindset.

Another way to encourage a "don't change this" mindset would be to use a word 
like "frozen" in the attribute/keyword. It wouldn't be surprising if you caused 
problems by changing something you've "frozen". Example:

        @frozen(var) public struct Foo { … }
        @frozen(case) public enum Bar { … }

>> As for the keyword…maybe `public(layout)` or `public(storage)`? People are 
>> familiar with the idea that you have to be careful when you change something 
>> that's public, so it wouldn't be surprising that a type with a public layout 
>> would be sensitive to changes to its memory layout.
> 
> I’m hesitant to use a keyword rather than an @attribute for this, because 
> (for the most part) attributes don’t change the language semantics of a 
> declaration, only its implementation (of course there are exceptions, like 
> @objc which introduces restrictions, etc).

I feel like I must not understand what you mean by semantics vs. 
implementation, because most of the attributes I can think of handle things I 
would consider to be "semantics". `@escaping`, `@autoclosure`, `@available`, 
`@discardableResult`, etc.

-- 
Brent Royal-Gordon
Architechies

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

Reply via email to