對不起第二次問專業化,但我還沒有很好的瞭解到底是怎麼回事...
所以,我有一個項目(與AI的Gomoku遊戲),並且我決定在它的熱門部分使用我自己的簡單和髒的@specialized ad-hoc集合,因爲我必須在沒有裝箱的情況下存儲原始類型。問題是,這並不能真正幫助,因爲在jvisualvm
的採樣我清楚地看到斯卡拉2.10.1和專業化(不能得到它的工作權利)
scala.runtime.BoxesRunTime.boxToShort()
吃起來毫秒十萬最佳移動搜索開始運行時。
項目:https://github.com/magicgoose/Gomoku
與窮人 「集合」 的文件:https://github.com/magicgoose/Gomoku/blob/master/src/magicgoose/gomoku/ai/SpecializedCollections.scala
的方法,這會導致拳擊(他們中的一個,我認爲):
trait Indexed[@specialized T] extends Enumerable[T] {
@inline def length: Int
@inline def apply(i: Int): T
// ...
@inline final def findIndex(fun: T => Boolean) = {
@tailrec def find(i: Int): Int = {
if (i < length) {
if (fun(this(i))) i
else find(i + 1)
} else -1
}
find(0)
}
}
我看到另一個項目( debox:https://github.com/non/debox),它試圖完成類似的事情(沒有原始裝箱的數據收集),但我並不真正瞭解它是如何完成的。
糟糕。這太奇怪了。順便說一句,我可以擺脫短和使用Int到處,幷包裝2 Ints到INT而不是包裝2字節到短,這是骯髒的,但確定這個特定的應用程序,因爲估值的範圍無論如何有限。現在我會嘗試一下,看看是否會有改進。 – 2013-03-11 14:27:52
我已經切換到Ints,現在沒有拳擊。 – 2013-03-11 15:11:28