Avatar
いや、固定長タプルに対しての mapreduce は静的に展開されるけど、
10:35 AM
可変長タプルや可変長型パラは特殊化されない限り動的に扱わないといけないから
10:35 AM
そこでこれまでにない実行モデルが必要になる。
10:36 AM
そのときにクロージャはジェネリック関数オブジェクトのようなもので扱われると思う。
10:36 AM
コーディングする側は、そこに書くクロージャ式は外で定義された T: Protocol について書くときと同じようになる。
10:38 AM
func square<T: Numeric>(of values: [T]) -> [T] { values.map { $0 * $0 } }
10:39 AM
↑と↓は func square<variadic T: Numeric>(of values: (T...)) -> (T...) { values.map { $0 * $0 } }
10:39 AM
クロージャを書くときの意識はまったく同じだと思うけど。
10:40 AM
それがどのように扱われるかが違うだけで。
10:40 AM
クロージャの中で守るべき制約も、コンパイルエラーになる条件も、何も変わらなくない?
10:41 AM
ABI 上は新しいものを追加しないといけないし、実行時にはジェネリック関数オブジェクト的なものにしないといけないし、特殊化されたら展開されないといけない。
10:41 AM
一度落ちます。