我正在研究如何将现有的混合 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 类型,例如Vector<double,3>
(2)一个类型化的瘦包装器,Array[Double]
它知道什么结构它应该是并根据需要创建/使用盒装单例。
是否有任何现有的库可以做这样的事情,或者为结构的打包数组实现任何替代方案?有没有人有关于性能特征可能是什么的经验,以及现有的编译器和 JVM 是否能够至少在非多态、密封的情况下优化这些盒子?
请注意,打包和漂亮的类型不是可选的:如果不打包,我会很快耗尽内存,如果我只有 Array[Double] C++ 的类型系统(不幸的是)获胜。