Crying out loud: things I dislike in F#

Ok, I decided that I have to write about this :) I really, really love F# — it’s an amazing language. It fits well for both simple and complex problems — that’s something that pretty rare (e.g. IMO it’s definitely better than Python in this sense). Besides that, it’s probably the fastest functional language you can find (at least if you run F# code on .NET, not Mono) — it’s very close to C# in terms of performance. But…

If you want a comparison, F# is like a sports car with many small dents. They don’t affect on anything from technical standpoint — their only purpose is to annoy the owner :) Worse, the car is so nice that these small dents annoy you even more, because they contrast so much with the rest. And if you are a perfectionist (luckily, I am), you simply can’t stop paying attention to these dents.

So don’t get me wrong: I love F#, and if you’d ask me to list what’s good there, I’d probably produce a much longer list than this one. But people don’t cry about good things. Thus I’m going to talk about things I really dislike, or simply hate :)

A bit of context: I am using C# from ~ 2003 — this is my primary language. But I am playing with F# for a few years, and I use it only for relatively small problems so far. It’s fair to claim that I have a very solid experience with C#, and some — with F#.

What I dislike in F#:

  1. You have to manually order your files in F# projects in order they must be processed by the compiler. I.e. basically, if file2.fs depends on file1.fs, file1.fs should go first, and file2.fs should be below it in the list of file. This is simply awful. Ok, most of F# projects contain relatively small number of files (partially, because there is an agreement that files must correspond to modules, i.e. they typically contain many types and functions), but this still looks like a very ancient requirement.

That’s it for now. Hopefully, some of these issues will be addressed in future versions of F#, though as I said, most of this is simply annoying / inconsistent. It shouldn’t stop anyone from using this awesome language :)

Creator of , ex-CTO @