I've created a math compiler written entirely in C# called dotMath. I'm thinking about releasing it under GPL, I'm in the process of seeing how to release it and the associated pro's and con's. I'd love to find someone who has done or is doing this and blogging the experience.
The library is a two-pass compiler. Once the compilation phase is complete, parsing is no longer needed to evaluate the expression. The library offers roughly 100-fold speed improvement over parsing-based evaluators.
The library can be used with variables and the API allows for full discovery/setting of the variables. Here's sample code that uses the library:
dotMath.CFuncCompiler oComp = new dotMath.CFuncCompiler( "(3*sin(x))/5");
oComp.Compile(); // normally set try..catch to trap syntax/expression errors
double dXValue = 10;
double dYValue = 0;
for( int i = 0; i < 100; i++)
{
oComp.SetValue("x", dXValue++ );
dYvalue = oComp.Evaluate();
// do something with y-value here
}
In addition, users may create and register their own functions with the class thereby increasing the capabilities of the compiler without dealing with the parsing and compilation details.
I'll keep blogging the experience of taking this public.... stay tuned! :)
I've spent a chunk of my weekend reading the Improving .NET Speed and Scalability article. There's quite a bit of useful info here, I originally read about at the MSDN .NET Framework Developer Center's RSS feed. I saw this morning that Don Box decided he needed to spend a bunch of time with this article on his blog site. I guess if Don is reading it, it might be worth considering...