Channels ▼


F#: Putting the 'Fun' into 'Functional'

Team Effort

The F# team currently includes approximately 12 contributors. Syme credits Hoban as an integral player for "his grasp of what makes for successful language development -- for everything from simplicity in an API design to pushing the boundaries with what can be done with the language."

"In many ways," Syme adds, "F# 2.0 represents the successful transfer of three independent major research results into product form. First, we have F# itself, developed by me with the assistance of James Margetson. Next, Andrew Kennedy has contributed the design and implementation of units of measure in F#, a direct transfer of the beautiful ideas from his research work. Finally, F# parallel and asynchronous programming has been influenced by many people, including Simon Peyton-Jones. I've been very grateful for his comments and support."

Others who have supplied invaluable support include Martin Odersky, designer of the functional language Scala and a professor at Ecole Polytechnique Federale de Lausanne, the Swiss Federal Institute of Technology in Lausanne, who hosted a visit by Syme during which key concepts behind F# came into focus; Ralf Herbrich, one of a number of colleagues who have applied F# within Microsoft Research; and Tomas Petrícek, a former Microsoft Research intern and co-author of Real World Functional Programming: With Examples in F# and C#, which Syme terms "one of the best books on applied functional programming."

Syme also emphasizes the importance of Microsoft Research itself in the development of the language.

"Microsoft Research has given F# a long-term home," he says, "which has allowed the language to mature in a context of intellectual curiosity and investigation. It's also given us access to many of the best researchers in the world. The partnership we've developed with the Microsoft Developer Division is something we very much look forward to continuing."

Problem Solving

Along the way, the F# effort encountered and surpassed a series of hurdles.

"Combining object-oriented and functional programming poses several challenges," Syme says, "from surface syntax to type inference to design techniques. I'm very proud of how we've addressed those problems. F# also has a feature called 'computation expressions,' and we're particularly happy with the unity we've achieved there."

Now, with F# having been added to the Visual Studio tool kit, it's time for the team to turn to new challenges, right? Not so fast, Syme cautions.

"A recurring theme of F# is its focus on accessing information from outside the language," he states. "Looking ahead, we want to continue to connect F# to rich data sources and external sources of functionality. There is a tendency in the industry to think that strong typing and navigability are necessarily lost around the fringes of an application. In many ways, C# and F# already dispel this myth. However, we have ideas about how to make external access even simpler and more intuitive, continuing to break new ground for typed languages."

Meanwhile, on the product side, it will be interesting, Hoban says, to watch how F# is embraced now that it has received official release as part of Visual Studio 2010.

"We've seen a number of interesting uses across a broad range of software applications," he says. "We're also seeing many examples of F# being used to build components of larger .NET applications. This allows projects to seamlessly integrate F# in areas where it provides significant value without needing to change anything else in their applications."

For Syme, staunch advocate of functional programming and making software development enjoyable, the prospect of people enjoying their work with F# is the ultimate reward.

"That," he says, "makes me happy."

Related Reading

More Insights

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

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's 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 or spam. Dr. Dobb's 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.