我在一个用 Java 执行矩阵和向量运算的程序上工作。在我当前的实现中发生的多个函数调用和对象创建使它变得缓慢且难以理解。
例如,我想通过速度积分更新机械点的位置:
void update(Vector3 position, Vector3 speed, float dt){
Vector3 displacement = new Vector3(speed);
displacement.assignMul(dt);
position.assignAdd(displacement);
}
这里的 API 不太自然,另外我需要分配一个 build 一个新的 Vector3 引用。显然,当以这种方式内联计算时,我在实际用例中测量到了巨大的性能改进:
void update(Vector3 position, Vector3 speed, float dt){
position.x += speed.x * dt;
position.y += speed.y * dt;
position.z += speed.z * dt;
}
是否有任何工具可以根据需要从特定领域的语言生成此代码?类似 Cog 的语法会很好。(Cog 是 Ned Batchelder 的代码生成工具)
void update(Vector3 position, Vector3 speed, float dt){
// [[[DSL position += speed * dt ]]]
position.x += speed.x * dt;//Generated Code
position.y += speed.y * dt;//Generated Code
position.z += speed.z * dt;//Generated Code
// [[[END]]]
}