Я работаю над программой, которая выполняет матричные и векторные операции на Java. Многократный вызов функции и создание объекта, которое происходит в моей текущей реализации, делает его вялым и трудным для понимания.
Например, я хочу обновить положение механической точки путем интеграции скорости:
void update(Vector3 position, Vector3 speed, float dt){
Vector3 displacement = new Vector3(speed);
displacement.assignMul(dt);
position.assignAdd(displacement);
}
Здесь API не является естественным, и, кроме того, мне нужно выделить для сборки новую ссылку на 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 - это инструмент генерации кода от Неда Батчелдера)
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]]]
}