式テンプレートを使用して行列/ベクトルの計算を大幅に高速化するC++ライブラリEigenに非常に感銘を受けました。
このライブラリをscalaで複製したいと思います。私の知る限り、scalas型システムはこのようなことを行うのに十分なほど強力ではありませんが、軽量のモジュラーステージングLMSが可能であるはずです。そこにはいくつかのプロジェクトがあるようです(Delight、virtualization-lmsなど)。信頼性とパフォーマンスの観点から、この種のプロジェクトに使用する権利はどれですか?
ありがとう
編集:scala2.10でマクロに出くわしました。多分これは私がここで使いたいものです。
@オムノムノム
重要な部分はhttp://eigen.tuxfamily.org/dox/TopicInsideEigenExample.htmlで説明されています
この例では、ベクトルの加算について説明しています
u = v + w
追加のために一時変数が作成され、この変数がuに割り当てられるため、(ネイティブ)C++では良好なパフォーマンスが得られます。
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];
これは明らかに高速で、追加の変数は必要ありません。