On 25 March 2025 20:29:16 GMT, Rob Landers <rob@bottled.codes> wrote:
> Personally, I'd feel that file-private should be kept as simple as possible 
> and limit it to "top-level" things, but that doesn't necessarily have to be 
> the case. If we did allow it on methods/properties, when mixing it with 
> regular visibility, what happens? `fileprivate public private(set)` ... means 
> what exactly?


If we didn't have "protected", would you ask the same about "protected 
private"? "fileprivate" would be just another access level, not something you'd 
combine with existing ones.


> maybe `fileprivate` on a property means `public` in the file, but `private` 
> outside the file. But then how would that intersect with inheritance?


That was the point of my philosophical rambling about Swift: you don't have to 
define new access levels in relation to old ones, or new features as exceptions 
to old definitions.

You can just define the keywords you allow, and the access they provide. That's 
true whether you're defining "private", "fileprivate", or "access_level_42".

For instance, "fileprivate" could simply mean "accessible from any code defined 
in this file". Since classes are fully declared in one file, that makes it a 
strict superset of the access currently meant by "private", and applies equally 
well to a whole type, a method, or a property.

I see no reason for inheritance to be involved at all. If we want an access 
level that means "accessible from any code in this file, or any subclass of the 
current type", we can make up a keyword for that as well - "fileprotected", or 
"fileprivate_or_protected", or whatever.


Rowan Tommins
[IMSoP]

Reply via email to