Я очень впечатлен библиотекой C++ Eigen, которая использует шаблоны выражений для значительного ускорения вычислений матриц/векторов.
Я хотел бы клонировать эту библиотеку в scala. Насколько я знаю, система типа scalas недостаточно мощна, чтобы делать что-то подобное, но должна быть возможна легкая модульная промежуточная LMS. Кажется, есть несколько проектов (Delight, виртуализация -lms и т. д. ). Что было бы правильно использовать для такого рода проекта с точки зрения надежности и производительности?
Спасибо
Изменить :Я только что наткнулся на макросы в scala 2.10. Может быть, это то, что я хочу использовать здесь.
@om -nom -nom
Важная часть объяснена в http://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html
. Пример поясняет, что сложение векторов
u = v + w
имеет хорошую производительность в (родном )C++, поскольку для добавления создается временная переменная, и переменная this присваивается u, поскольку
for(int i = 0; i < size; i++) tmp[i] = v[i] + w[i];
for(int i = 0; i < size; i++) u[i] = tmp[i];
Eigen использует метапрограммирование шаблонов (, шаг за шагом объясняемое в приведенной выше ссылке ), чтобы уменьшить это во время компиляции до
for(int i = 0; i < size; i++) u[i] = v[i] + w[i];
, что, очевидно, быстрее и не требует дополнительной переменной.