Hi friends, When I first heard of F# a few years ago I laughed out loud, but its popularity is exploding, and .NET pays the bills, so I am forced to take it a little bit more seriously these days.
Tail call elimination in .NET is a *hint only* that JIT is free to ignore in many situations [1], including: - in debug builds, - when calling virtual methods, - when calling a method in a different security trust group, - in any other case where an "implementation-specific restriction prevents the 'tail.' prefix from being obeyed." Yet tail call elimination is *essential* to the correct functioning of programs written in any functional programming language. F# appears to eliminate tail calls to self by program transformation where it is trivial to do so, but relies entirely on the CLR for optimizing tail calls in general. This would mean that the stability and reliability of programs written for the CLR in F# is uncertain, and that debug builds of F# programs are always unreliable. I would want much stronger guarantees about space complexity if I were to seriously consider F# as a programming language for paid work. So if anybody has used F# in the real world, what's the story? [1] "Common Language Infrastructure (CLI)" 6e, ECMA-335, III.2.4 -- Thomas Koster
