私は、既存の混合 Python/C++ 数値コードベースを混合 Scala/C++ (長期的には理想的にはほぼ Scala) に変えるには何が必要かを調査しています。最大の問題は、構造体のパックされた配列であると予想しています。たとえば、C++ には次のような型があります。
Array<Vector<double,3>> # analogous to double [][3]
Array<Frame<Vector<double,3>>> # a bunch of translation,quaternion pairs
これらは、Numpy のおかげで、コピーせずに Python と C++ の間で相互に変換できます。
JVM では、ボックス化されていない配列はほんの一握りの型しか持てないため、(1) 構造体ごとにボックス化された Scala 型を作成し、(2)何を知っているVector<double,3>
型付きの薄いラッパーを作成することしか考えられません。Array[Double]
構造体であり、必要に応じてボックス化されたシングルトンを作成/消費します。
そのようなことを行う、または構造体のパック配列の代替手段を実装する既存のライブラリはありますか? パフォーマンス文字がどうなる可能性が高いか、および既存のコンパイラと JVM が少なくとも非ポリモーフィックな密閉されたケースでボックスを最適化できるかどうかについて、経験のある人はいますか?
パッキングとナイス タイピングはオプションではないことに注意してください。パッキングがないと、すぐにメモリを吹き飛ばしてしまいます。Array[Double] しかない場合は、(残念ながら) C++ の型システムが優先されます。