Andrew Binstock

Dr. Dobb's Bloggers

Whither F#?

February 13, 2011

I really did entertain some slender hopes that F#'s release would lead to wider adoption of functional programming. The benefits of the functional approach are appealing enough on many levels that, I hoped, some developers would be willing to go through the necessary mind bend to avail themselves of the goodies. As far as I can tell (and there is not a whole lot of evidence to go on), this has not happened. F# intrigued a few programmers who kicked the tires and then went back to their regular work. This is rather like what Haskell did a year earlier, when it was the dernier cri on Reddit and other programming community boards before sinking back into its previous status as an unusual curio. The year before that, Erlang underwent much the same cycle.

For a long while, I have shared the opinion of many analysts that functional programming is just too much of a divergence from regular programming. That is, starting from a dead stop and jumping into a new language and a new paradigm was too much to ask; and the high price of admission would keep functional programming from ever truly breaking out. But Scala in good part solved this problem by being a multi-paradigm idiom. This means that it allows developers to learn the language inside the OO metaphor they already know, and then branch out into the functional way of life in small steps. To my eye, however, even Scala has not made it happen. Despite considerable enthusiasm for the language, almost all the Scala code I see is straight procedural code with no trace of functional coloring.

So, if it's not the language, then what is the problem? To my eye, it's the lack of demonstrable benefit for business solutions — which is where most of us live and work. Erlang, which is probably the closest to showing business benefits across a wide swath of business domains, is still a mostly server-side solution. And most server-side developers know and understand the problems they face. The extra lift of actors and a new VM platform don't have much appeal, because the existing tools are good enough. Add the complexity of rewiring their thinking for the functional paradigm, and there is virtually no appeal at all.

This is the nub of the problem. Functional programming cannot show enough lift in business areas to find itself taken up in preference to conventional solutions. As a result, it remains niche-bound, locked inside small problem domains in which its unique attributes can demonstrably shine.

One event that might well push it into the mainstream is the advent of truly many core processors (more than 16 cores, for example). At that point, the processor will force upon developers the need to think in new ways to unlock the performance potential the silicon promises. Then, the need to move beyond the current parallel models and adopt one that reduces side effects may become a requirement. At that point, functional programming will have a real story to tell. If this comes to pass, it'll happen soon, I expect. And with F#, Microsoft developers will have a ready tool.

— Andrew Binstock, Dr. Dobb's Executive Editor
alb@drdobbs.com





Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

DrDobbs encourages readers to engage in spirited, healthy debate, including taking us to task. However, DrDobbs moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing/SPAM. DrDobbs further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Best of the Web

What the New iPad and iOS 5.1 Mean for Developers

The new display is gorgeous. But local storage for HMTL5 is currently broken on the new iPad and performance of some apps is slower. Here's a deep dive into the issues, including benchmarks and analysis.

Quick Read

Triple Buffering as A Concurrency Mechanism

Triple Buffering is a way of passing data between a producer and a consumer running at different rates. It ensures that the consumer sees only complete data with minimal lag.

Quick Read

Embedding GDB Breakpoints in C Source Code

Have you ever wanted to embed GDB breakpoints in C source code? Something like this:
printf("Hello,\n");
EMBED_BREAKPOINT;
printf("world!\n");

Quick Read

Writing Kernel Exploits

Why attack the kernel? Because it has a huge attack surface with potential for very interesting bugs. This presentation (pdf) takes a code-level dive into recently reported Linux-kernel exploits.

Quick Read


More "Best of the Web" >>



Video

Enabling People and Organizations to Harness the Transformative Power of Technology