> On Feb 21, 2017, at 10:11 PM, Matthew Johnson <[email protected]> wrote:
>
>
>> On Feb 21, 2017, at 9:47 PM, Brent Royal-Gordon via swift-evolution
>> <[email protected]> wrote:
>>
>>> On Feb 21, 2017, at 7:38 PM, Robert Widmann <[email protected]>
>>> wrote:
>>>
>>> Correct. Because, in dividing the submodule across an extension, you have
>>> placed what should be a private API into a differently-scoped location.
>>
>> Okay. So is your submodule design not intended to address the "I want to
>> encapsulate implementation details so they're only visible to several units
>> of code in different files, but not the entire module" use case? Because if
>> there's no way to scope a symbol to "everything inside this submodule, but
>> nothing outside this submodule", I think it leaves that use case unserved.
>
> Unless I’m missing something there is also another encapsulation-related
> problem with the proposed design. Let’s suppose for the sake of discussion
> there was a `submoduleprivate` access modifier (intentionally ungainly and
> not realistic).
>
> // File 1
> module Foo {
> // internal, visible to the whole module
> class Bar { submoduleprivate var protectedState: Int = 0 }
> }
>
> // File 2 - Has nothing to do with Foo at all
> import MyModule.Foo
>
> module NotFoo {
> // Hey, I need to see Bar.protectedState!!!
> func totallyNotFoo() {
> var bar = Bar()
> bar.foosExposedPrivates = 42
> }
> }
>
> // ok, I’ll just add an extension to Foo so I can see submoduleprivate and
> wrap what I need
> module Foo {
Oops, this should have been `extension Foo`, but otherwise I believe it is
valid under this proposal.
> // Hey, I’ll be nice and keep it fileprivate, but I could make it public
> if I wanted to.
> extension Bar {
> fileprivate var foosExposedPrivates: Int {
> // Yep, I’m inside Foo so I can see it’s submoduleprivate stuff
> get { return protectedState }
> set { protectedState = newValue }
> }
> }
> }
>
>>
>> --
>> Brent Royal-Gordon
>> Architechies
>>
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected]
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution