Hi SwiftNIO interested folks,
tl;dr: Swift 4.2 will warn about @_inlineable
/@_versioned
as they have been renamed to @inlineable
/@usableFromInline
. SwiftNIO uses the old spellings so to remain warning-free, we're planning to release SwiftNIO 2.0.0 together with Swift 4.2 and making SwiftNIO 2.0.0 a Swift 4.2-only release (no longer supporting Swift 4.0 & 4.1). Any thoughts about that?
For clients of SwiftNIO to have acceptable performance we rely on cross-module inlining (at the moment through @_inlineable
/@_versioned
). That works well and SE-0193 fortunately decided to make this public (non-underscored) which is great. Unfortunately, Swift 4.2 will also warn about using the old spellings and the Swift team decided to not offer an alternative (CC @Slava_Pestov) to be able to support Swift 4.0, 4.1 and 4.2 without warnings . Unfortunately, this can also not be solved with
#if swift(...)
constructs unless we'd copy the full body of everything that has @_inlineable
/@_versioned
decorations and the copying is unacceptable.
That essentially leaves SwiftNIO with two options:
- leave everything as is, continue supporting Swift 4.0, 4.1 and 4.2 which would mean the Swift 4.2 compilation will issue a lot of warnings about the fact that
@_inlineable
has been renamed to@inlinable
- rename
@_inlineable
to@inlinable
and@_versioned
to@usableFromInline
and release SwiftNIO 2.0.0 (because that's SemVer major). That however means that Swift 4.0 & 4.1 will no longer be supported and that would apply to our users as well.
I realise that's not a great position to be in but we hope that's acceptable for our clients such as Vapor (CC @tanner0101), IBM (CC @Pushkar_N_Kulkarni, @IanPartridge, Chris Bailey), various libraries (CC @Helge_Hess1) and possibly others.
Please let me know your thoughts.
-- Johannes