SwiftのType Inference:自ずと限界がある

投稿者: | 2019年7月29日

SwiftのType Inference:コンパイラが音を上げることも

Static TypingのSwiftにはType Inferenceという機能があって分かり切った変数の型の記載を省略することができる。どのTypeなのかをInferしてくれるわけだが、誰がいつ実行するのかといえばコンパイラがコンパイル時にである。

人間の目でわかりきった場合でもコンパイラは真面目に実行してしまうので、大きな配列に対して実行しようとすると

「コンパイラは適切な時間内にType Inferenceを完了できない可能性があります」と言う意味のエラーを吐いてコンパイルできないことがある。

私が初めてこのエラーを見たのは文字列だけの2次元配列で30x250などと比較的大きな行列であった。(でも数値解析などではもっと大きなものを扱うのは日常茶飯事・・・。)

let twoDimLargeMatrix = [["abc","def",... ],["ABC", "DEF",... ],...]

このように書くと上記のようなエラーになるのでちゃんとType指定をして

let twoDimLargeMatrix[[String]] = [["abc","def",... ],["ABC", "DEF",... ],...]

と書けばビルドできる。要するにものには限度、ということだ。

まとめ

SwiftのType Inferenceは便利だが大きな配列等では利用しない方がコンパイルタイム節約になるだろう。またエラーで利用できないこともある。それに書いてあった方があとでコードが読みやすいケースも少なくないと思う。

コメントを残す