> On Oct 2, 2017, at 2:20 PM, Greg Parker <[email protected]> wrote: > > >> On Oct 2, 2017, at 1:31 PM, Slava Pestov via swift-evolution >> <[email protected] <mailto:[email protected]>> wrote: >> inlinable declarations can only reference other public declarations. This is >> because they can be emitted into the client binary, and are therefore >> limited to referencing symbols that the client binary can reference. >> > > Private @inlinable functions are useful. For example, you might want a helper > function to be inlined into a public @inlinable function for performance, but > you don't want that helper function to be called by outside clients directly. > > The restriction would then be "inlinable declarations can only reference > other public declarations and other @inlinable non-public declarations". This > relaxation would have no affect on ABI: only @inlinable things could be > inlined, and only public things could be ultimately referenced by inlined > things. > > Having said that, it should be fine to use "public @inlinable only" for now > and consider relaxing the restriction later.
That’s what @_versioned is currently for. You can define a function as @_versioned @_inlineable and reference it from other public inlinable functions, without making it visible to AST-level lookup. While I would prefer to punt formalizing this to a future proposal, we can still design the correct spelling and behavior of @_versioned here (I’m pretty sure the current attribute isn’t it). Slava > > > -- > Greg Parker [email protected] <mailto:[email protected]> Runtime > Wrangler > >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
