Khi suy ra các kiểu, trình biên dịch thường cần tính Giới hạn Trên Ít nhất (LUB) của danh sách các kiểu. Ví dụ, loại if (cond) e1 else e1
là LUB của các loại e1
và e1
.
Những loại này có thể khá lớn, ví dụ, hãy thử điều này trong REPL:
:type Map(1 -> (1 to 10), 2 -> (1 to 10).toList)
scala.collection.immutable.Map[Int,scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int] with Serializable{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def dropRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def takeRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def drop(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def take(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def dropRight(n: Int): scala.collection.immutable.Seq[Int]...
Cam kết này đã giới thiệu một số kiểm tra độ tỉnh táo để giới hạn độ sâu của các kiểu suy luận như vậy.
Gần đây đã có một số công việc bổ sung vào quy trình biên dịch để phát hiện các kiểu suy luận mất nhiều thời gian để tính toán và đề xuất những vị trí mà chú thích kiểu rõ ràng có thể cần thận trọng.