Hello, everyone. I have a question about @_implementationOnly.
Currently, Foundation in apple/swift-corelibs-foundation uses @_implementationOnly to import CoreFoundation. At the same time, RunLoop.swift is still importing CoreFoundation without the attribute.
The import in RunLoop.swift causes warnings that say 'CoreFoundation' inconsistently imported as implementation-only. But if the warnings are resolved by adding @_implementationOnly for all imports, there will be a problem with the static auto-linking mechanism, I think.
AFAIU, if Foundation imports CoreFoundation without @_implementationOnly, a client of Foundation doesn't need to import CoreFoundation and also doesn't need to link libCoreFoundation explicitly, thanks to the auto-linking mechanism.
But if Foundation imports CoreFoundation with @_implementationOnly, CoreFoundation wouldn't be linked to the client automatically. So when a client code uses a Foundation API, that depends on CoreFoundation implementation, linking will be failed with undefined symbol: _CFXXXX as long as the client doesn't import CoreFoundation explicitly.
So I want to confirm that the explicit import is the expected behavior of @_implementationOnly or not.
CC: @jrose
Related posts
4 Likes
Karl
(👑🦆)
2