LoginSignup
3
3

More than 5 years have passed since last update.

[Swift]自分のコードがコンパイラを殺した話

Posted at
final class Killer {
  var dogs  = [Dog]()
  var cats  = [Cat]()
  var foxes = [Fox]()
  var animals: [Animal] {
    return dogs.map{$0} + cats.map{$0} + foxes.map{$0}
  }
}

class Dog: Animal {
}
class Cat: Animal {
}
class Fox: Animal {
}

class Animal {
}

これをコンパイルしようとするとコンパイラのCPU使用率が100%になる。

恐らくAnimalクラスのサブクラスのオブジェクトの配列たちをAnimalクラスの配列として連結するとコンパイラの型推論がおかしくなって死ぬんだと思う。

同じように

let hoge = [0..<10, 1..<4, 5...6, 7..<9,0..<10, 1..<4, 5...6, 7..<9]

などのように長いrangeの配列などでもコンパイラの型推論がおかしくなって死ぬ

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3