[swift-evolution] [Discussion] A Problem With SE-0025?

Xiaodi Wu xiaodi.wu at gmail.com
Wed Jun 15 13:48:02 CDT 2016


On Wed, Jun 15, 2016 at 1:37 PM, Robert Widmann via swift-evolution <
swift-evolution at swift.org> wrote:

> The scope of the *declaration* is not the issue.  The scope of its
> *members* is.
>

Oy, if we're to have both `fileprivate` and `private`, then the previously
visually appealing rule about maximum visibility of members will have to be
a little messy.

IIUC, the problem is this: the current rule is that an internal type can
have members that are at most internally visible (not public), and that a
private type can have members that are at most privately visible. This is
nice and tidy because in all cases, the declaration and the members it
encloses are always in the same module and in the same file. But, with the
new meaning of `private`, the top-level declaration is actually in a
*different* scope than its members. So, a private type must be allowed to
have members that are at most fileprivately visible.


> ~Robert Widmann
>
> 2016/06/15 11:36、Matthew Johnson <matthew at anandabits.com> のメッセージ:
>
> > The scope for a top-level declaration is the file itself.  This means
> that top-level declarations with `private` and `fileprivate` should have
> the same behavior.  They should not be uninstantiable or unusable.
> >
> > -Matthew
> >
> >> On Jun 15, 2016, at 1:31 PM, Robert Widmann via swift-evolution <
> swift-evolution at swift.org> wrote:
> >>
> >> While implementing SE-0025 (fileprivate), I noticed an interesting bug
> in the proposal.  Under the implementation outlined there, any top-level
> structure, class, or enum declared private cannot possibly be instantiated
> and so cannot be used in any way.  Because of this, private top-level
> declarations are more often than not blown away entirely by the compiler
> for being unused.  It seems strange to me to allow a key language feature
> to act solely as a hint to the optimizer to reduce the size of your
> binary.  Perhaps the restrictions around private needs to be relaxed or the
> line between fileprivate and private needs to be investigated again by the
> community before inclusion in the language.
> >>
> >> Thoughts?
> >>
> >> ~Robert Widmann
> >> _______________________________________________
> >> swift-evolution mailing list
> >> swift-evolution at swift.org
> >> https://lists.swift.org/mailman/listinfo/swift-evolution
> >
> _______________________________________________
> 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/20160615/3243e7f3/attachment.html>


More information about the swift-evolution mailing list