I've been thinking lately a lot about how much I like using F# and how I use it.
I'm a grad student and I have been developing my own software to run scientific simulations for the last 2 years. 95% of my code is C#. It's been a bit of a pain, though, because I can't use C# for everything, as hard as I try. Setting up my simulations usually requires MATLAB to create the input files, and after the simulation is finished, I need to use MATLAB again to postprocess the results.
This leads to a lot of inefficiencies, because not only do I have file parsers written in C#, but I need to duplicate that functionality in MATLAB. So if I change anything in my code, I need to update it in 2 places -- my C# simulation code and my MATLAB pre/post-processing code.
I've started using F# for the pre/post-processing because it just makes sense -- I can re-use all of my C# libraries because F# is interoperable with all things .NET. This is fantastic. I mainly use .fsx files for scripting and put commonly-used code in .fs files.
But, as useful as this is, the quality of work (i.e. graphs, plots, data processing, etc) aren't as nice as MATLAB. So I've been thinking about what the perfect F# IDE would be like. And, now that Visual Studio 2008 Shell has been released (and F# has been announced to become the next "product" language for Visual Studio), it seems as though this kind of thing might not be very far off. Sweet.
As much as I like the F# language, the real pain point for me is finding .NET libraries to do useful scientific computing tasks. You know, like plotting highly-customized graphs (2D and 3D), doing operations on large data files, performing linear algebra, creating animations and movies, optimization, interacting with various 3D/FEM file formats, etc. Essentially, everything that MATLAB does :P (but much faster. off-topic: man, MATLAB is sooooo slow.)
ZedGraph works for 2D graphs, and I know I can use Managed DirectX for doing 3D stuff. dnAnalytics can be used for linear algebra and I use Alchemi for parallel computing. But the APIs for these kinds of thing are, when you really get down into it, extremely low-level. If I want a 3D plot of a function, I need to go in and create the mesh by hand, position lights and cameras, etc. It's not like calling the "surf" function in MATLAB.
Perhaps that might be a really useful community project to start -- an "F# Lab" Visual Studio 2008 Shell plugin that integrates FSI with a number of useful open-source .NET libraries for doing numerical/scientific computing tasks, with a well-thought-out F# wrapper layer that abstracts away some of the tricky C#/F# interop. I know I'd sure use it.
Just my $0.02. Anybody else got any more ideas? :)
http://thevalerios.net/matt/