`--disable-library-evolution` をデフォルトにしたい
omochi opened this issue · comments
--disable-library-evolution
をデフォルトにしてほしいです。
Library Evolutionは配布用のバイナリライブラリを作るための言語機能です。
一方、scipioのツールとしての目的は、
依存先ライブラリを事前ビルドして、開発中のリビルド時間を減らすことだと思います。
この目的においては、
ビルドしたキャッシュとしてのライブラリを再配布することは無いので、
Library Evolutionは不要です。
一方で、Library Evolutionは以下のようなデメリットがあります。
- swift-nioなどの一部のパッケージがビルドできなくなる
- 最適化に制限がかかりパフォーマンスが低下する、
2については開発中だけなので許容できるかもしれませんが、
1についてはそれによって全く利用できなくなるのでとても不便です。
そして現在のところ、Swiftのライブラリコミュニティでは、
バイナリ配布はほとんど実施されていません。
むしろswift-nioのようにLibrary Evolution非対応があるぐらいです。
Discordでも同様の意見があったのでご確認ください。
https://discord.com/channels/291054398077927425/304939011904897024/1135810276969689089
Discordでコメントしたものです。
多くのアプリ・ライブラリで使用されているswift-collectionsも @inlinable
を使用しており、Library Evolution非対応です。
https://github.com/search?q=repo%3Aapple%2Fswift-collections%20inlinable&type=code
依存を含めるとLibrary Evolution非対応のライブラリは数多く存在し、それらがデフォルトでビルド出来ないのは非常に不便に感じます。
xcodebuildの create-xcframework
では、標準設定ではLibrary Evolutionが無効のFrameworkからはXCFrameworkを作れないようです。
swiftinterfaceがないFrameworkからXCFrameworkを作るには、 -allow-internal-distribution
オプションが必要で、そちらがイレギュラーに思えたので、デフォルトではLibrary Evolutionを有効化しています。
https://github.com/giginet/Scipio/blob/main/Sources/ScipioKit/Producer/PIF/XCBuildClient.swift#L163-L165
どちらが標準かは決めの問題で、しっかりとドキュメンテーションされていれば、Scipioの初期動作がどちらでも大きな問題ではないと思ってます。
ご指摘の通り、Scipioのキャッシュシステムを前提として扱うのであれば、無効がデフォルトの方が良いかも知れません。
正式リリース前のこのタイミングで変更してしまおうかなと思います。
なるほど、 create-xcframework
の仕様が念頭にあったのですね。
バイナリライブラリには、配布とキャッシュという2つの大きな用途がある中で、
XCFrameworkという技術単体にとっては、配布が主目的だから、
-allow-internal-distribution
が追加的なオプションとなるのは合理的だと思います。
一方で、 Scipio の主目的はキャッシュの方だから、
scipioがcreate-xcframeworkをするときにややこしいことになるのは当然で、特に問題ないと思います。
Scipioのユーザにとっては create-xcframework
の**や事情は隠蔽して設計するのが良いと思います。