ジェネリクス関数のコンパイルに関して
「ジェネリクス」の場合と「普通に型を縛った」場合で、関数の実行速度に差があるかに関して質問です。
(前提として、playgroundのようなJIT環境ではなく、コンパイル(AOT)されたアプリで実行している想定)
(アプリのビルド時間には影響があるのはわかっています。関数の実行速度にフォーカスしています)
ある
- 「ジェネリクス」の場合
- 「普通に型を縛った」場合
の関数を例に取れば、以下
ex
// ① func hoge<T>(huga: T) { print(huga) } // ② func hoge(huga: String) { print(huga) }
①は呼び出し元で何をセットするかで型が決まるかと思いますが、
いずれもhoge(huga: "txt")
で実行可能です。
hoge(huga: "txt")
とそれぞれ書いた場合、呼び元の関数は違いますが、
実際コンパイルされる際に型が決まると思うので、中間コード?ネイティブコード?では決められた形になると思っています。
つまり、アプリ内で読み込まれるネイティブコードは同じなので、実行速度も同じになると考えているですが、どうなんでしょうか?
(上記は、関数内の処理がが早すぎて実際実行時間に差異は出ないかと思いますが、もっと処理が重い場合などで)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 17:50