Avatar
omochimetaru 10/8/2025 3:10 PM
[Pitch] Controlling function definition visibility in clients https://forums.swift.org/t/pitch-controlling-function-definition-visibility-in-clients/82372
なかなか骨太の議論なんだけど、面白い提案。 コンパイル後のバイナリに、
  • ABIエントリポイントを作るかどうか
  • コードを公開するかどうか(inline化用)
をセットで @export(interface, implementation) で制御できるようにする。 もともとの議論は Embedded Swift で不都合があって、 Embedded だと原則実装公開なので、 C とリンクするような場合に、ABIシンボルがなくてうまくいかない場合が起きたりするらしい。 で、これを導入すると、既存のいろんなことが整理できる。 @_alwaysEmitIntoClient@export(implementation) @_neverEmitIntoClient@export(interface) @inlinable → ほぼ @export(interface, implementation) @usableFromInline → ほぼ @export(interface) @export は API 仕様のpublic, internal とは直交して、 ABI仕様みたいな感じ。 既存の @inline(always), @inline(never) ともうまく直交する。 export impl と inline never だと自分用に実装を埋め込む。
👀 2