- says from the start that the solutions aren't optimal
- shares the code that gives the quoted results right away
- makes it easy to verify/check/contribute
First thing I notice though is that it's (looking at the functional F# code) using exceptions for control flow. It seems the author uses a 'NoMoreWork' exception as a kind of break out of a loop.
While my F# is rusty, I doubt that this is a good idea, probably neither beautiful nor fast..
Edit: Another couple of comments. Things that weren't immediately obvious to me after reading the blog entry alone:
- The make benchmark passes really just one board with two moves to an executable. Just like the time commands before. So what we're measuring is the startup time of the process (native vs. managed/clr) and the cost to find a single/first move.
- The whole engine thing is designed around the concept of 'I pass the whole board as arguments'. So the driver seems to compute a string representation of the board after each move and _create a new process of the engine_. So - yes, this is a bad idea for managed code. Or anything that could otherwise use JIT.