スペシャライゼーションについて 2 回目の質問をして申し訳ありませんが、一体何が起こっているのかまだよく理解できていません...
そこで、1 つのプロジェクト (AI を使用した五目並べゲーム) があり、独自のシンプルでダーティな @ を使用することにしました。ボクシングせずにプリミティブ型を保存する必要があるため、そのホットな部分に特化したアドホック コレクション。問題は、これが実際には役に立たないことですjvisualvm
。
scala.runtime.BoxesRunTime.boxToShort()
最適な移動検索の実行が開始されると、数千ミリ秒が消費されます。
プロジェクト: https://github.com/magicgoose/Gomoku
貧弱な「コレクション」を含むファイル: https://github.com/magicgoose/G
omoku/blob/master/src/magicgoose/gomoku/ai/SpecializedCollections.scala
ボクシングを引き起こす方法(そのうちの1つだと思います):
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 ) を見たことがありますが、これは同様のこと (プリミティブ ボクシングを使用しないデータ コレクション) を達成しようとしていますが、そこでどのように行われるのかよくわかりません。