[swift-evolution] Swift evolution proposal: introduce typeprivate access control level
Jay Abbott
jay at abbott.me.uk
Thu Dec 1 11:38:12 CST 2016
We really need a place for discussions that apply to deferred issues. Some
previous suggestions from myself and others have been:
- A Discourse board
- Tag emails [4.1] (or something else) if they are known to relate to
deferred proposals.
- A ‘deferred’ directory for complete proposals in the swift-evolution
repo to give deferred topics more visibility and a central place for
discussion around
Until then, I’ll just pile on…
I’ve previously suggested an idea similar to this where a type can define
its own named access groups and then use them for access control. I didn’t
flesh it out in full (as this is a deferred topic anyway) but the concept
was something along these lines…
A class might define a group called Subclasses and that would then be
available to use on properties/functions like access(Subclasses) and
another group called Friends used with access(Friends). This would give the
most flexibility and allow a potentially complex combination of access
controls to be moved elsewhere and re-used in the function definitions that
use it.
Here’s some throw-away syntax to demonstrate a few possibilities:
accessgroup Subclasses {
type: Self
extensions: true // Extensions of types matching 'type' can access
file: true // Anything in this file can access
}accessgroup Friends {
type: UIView, Bob!, Jeff // Any UIView or Jeff type (including
subtypes) and Bob (not including subtypes) can access.
}
This would be defined inside a type - so named groups are type-specific.
This structure can then be used to define whatever type of access we decide
would be useful - access by named modules / submodules? access by direct
subtypes only? access only from specific functions? access from
protocol-conforming types - only the functions of that protocol or any
function in the conforming class? etc.
You can go wild of course with what can be defined in an accessgroup - the
idea here is that we start simple and then discussions about adding other
access control features become a lot easier. We could even go so far as to
say that existing private internal etc. keywords are synonyms for
access(private), access(internal) where private and internal are
always-defined (reserved) accessgroup names.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161201/2e5a8a90/attachment.html>
More information about the swift-evolution
mailing list