F# is great. I love working with F# and, before that, I loved working with OCaml. However, I've had to break off the relationship for a few key reasons. While it is a real joy to work with F# and OCaml, here is a list of issues that I had and either didn't have / take the time to resolve or didn't find a suitable solution easily:
- I've always worked with imperative languages and I understand how to do large-scale design in said languages using a variety of design patterns. F# and OCaml are more . . . fluid. There's almost no established materials on how to "properly design" programs in functional languages - certainly nothing like the famous Gang of Four and their descendants. Trying to mirror imperative design patterns in functional languages is a recipe for failure. However, I think that this can be solved by working with F# and OCaml more extensively. Learning more about how a language works tends to reveal many design patterns, I've found. However, I haven't got the time to do that.
- Neither language has strong support for UI development, either desktop-based or web-based. Sure, there are exceptions - WebSharper, lablgtk (effectively tied down to Linux only - have you ever tried to run a GTK+ app on Windows? It's hideous), etc. However, until I am spoiled for choice (Java has Swing, SWT, GWT, hooks into SmartClient / jQuery / ExtJS, and more ad infinitum), I can't see myself going back to either language.
Promising developments:
- Xavier Clerc, who is heavily involved with OCaml, has been working on an OCaml-Java bridge (http://ocamljava.x9c.fr/index.html). If this matures outside the realm of a research project, I think it would be a massive boost for OCaml.
- Microsoft has dropped support for Silverlight. This hopefully means that they will add support for more standard web technologies and this will make it to F# as well.
One caveat: Most of my knowledge is back from 2007 / 2008 when I was working with F# and OCaml. However, taking a quick look again (at http://cs.hubfs.net/, for example), it seems like things haven't changed much. However, if they have, I'd love to be proven wrong.
- I've always worked with imperative languages and I understand how to do large-scale design in said languages using a variety of design patterns. F# and OCaml are more . . . fluid. There's almost no established materials on how to "properly design" programs in functional languages - certainly nothing like the famous Gang of Four and their descendants. Trying to mirror imperative design patterns in functional languages is a recipe for failure. However, I think that this can be solved by working with F# and OCaml more extensively. Learning more about how a language works tends to reveal many design patterns, I've found. However, I haven't got the time to do that.
- Neither language has strong support for UI development, either desktop-based or web-based. Sure, there are exceptions - WebSharper, lablgtk (effectively tied down to Linux only - have you ever tried to run a GTK+ app on Windows? It's hideous), etc. However, until I am spoiled for choice (Java has Swing, SWT, GWT, hooks into SmartClient / jQuery / ExtJS, and more ad infinitum), I can't see myself going back to either language.
Promising developments:
- Xavier Clerc, who is heavily involved with OCaml, has been working on an OCaml-Java bridge (http://ocamljava.x9c.fr/index.html). If this matures outside the realm of a research project, I think it would be a massive boost for OCaml.
- Microsoft has dropped support for Silverlight. This hopefully means that they will add support for more standard web technologies and this will make it to F# as well.
One caveat: Most of my knowledge is back from 2007 / 2008 when I was working with F# and OCaml. However, taking a quick look again (at http://cs.hubfs.net/, for example), it seems like things haven't changed much. However, if they have, I'd love to be proven wrong.