InfoQ

News

F#: Two Remarkable Years

Posted by Jonathan Allen on Jan 10, 2007 06:00 AM

Community
.NET
Topics
Research
Tags
F#,
Functional Programming

F# is primarily a research project being developed by Microsoft Research. It is a functional programming language built on the Common Language Runtime (CLR) and heavily inspired by OCaml. The list of differences between the two languages is actually quite brief.

F# was first announced by Don Syme in 2005. Since then it has been a major inspiration for mainstream .NET languages, providing much of the groundwork for the LINQ project. F# can also claim to be the first .NET language to support generics.

Two years after its release, it has already made significant progress towards becoming more than just another research project. One of its most noteworthy achievements is that it was used by the DOE Joint Genome Institute to create Darren Platt calls "the fastest genome assembly viewer I've ever seen".

On the lighter side, F# can be used to create games for the XBox 360 using the XNA Game Studio. This is feat that mainstream .NET languages like Visual Basic and IronPython cannot claim.

Extensions for Visual Studio have been available for nearly a year now, which is impressive considering that one of the original .NET languages, JScript.NET, still doesn't have VS support and likely never will.

Don Syme is currently offering sample chapters of his book, Expert F#. His book, along with Robert Pickering's Foundations of F# were picked up by Apress for release this year.

6 comments

Reply

F#: Two Remarkable Years by Eirik Mangseth Posted Jan 10, 2007 8:46 AM
Re: F#: Two Remarkable Years by Don Syme Posted Jan 10, 2007 9:25 AM
Re: F#: Two Remarkable Years by Eirik Mangseth Posted Jan 11, 2007 8:55 AM
Two Remarkable Problems... by Stefan Wenig Posted Jan 11, 2007 5:42 AM
Re: Two Remarkable Problems... by Alex Peake Posted Jan 27, 2007 5:34 PM
Re: Two Remarkable Problems... by Stefan Wenig Posted Feb 13, 2007 3:42 AM
  1. Back to top

    F#: Two Remarkable Years

    Jan 10, 2007 8:46 AM by Eirik Mangseth

    >>F# can also claim to be the first .NET language to support generics. This is pure bollocks. Eiffel has generics and was ported to .Net long before F# even saw daylight.

  2. Back to top

    Re: F#: Two Remarkable Years

    Jan 10, 2007 9:25 AM by Don Syme

    Nice article - thanks for the mention. Eirik - the team at Microsoft Research Cambridge invented .NET generics and used an early version of the F# compiler extensively in early testing. We designed and implemented the generics support for the F# and C# compilers and did essentially the complete implementation in the .NET Common Language Runtime, which then became part of the product. Of course the design of generics in Eiffel formed a significant part of the design backdrop. I guess you could say our modified ILASM assembler was the first language to target generics, followed by the ILX assembler and an early (now discarded) attempt at a "Haskell .NET". Then came early versions of the C# compiler and an early version of the F# compiler as we completed various bits of each (the very first 'hacked up' F# compiler was in 2002, though the language itself didn't really take shape until much later). Early versions of all of these were used extensively in the testing of .NET generics. Cheers Don

  3. Back to top

    Two Remarkable Problems...

    Jan 11, 2007 5:42 AM by Stefan Wenig

    F# is a very promising and fascinating project. Looking at the assemblies generated from F# was quite a nice experience. However, last time I checked there were two major problems that kept me from looking further into it: - F# does not support meta-programming, one of the more interesting features of OCAML (via caml4p). .NET is really lacking here, and it would be great to see a language like F# provide _something_ in this area. - The license is practically unusable for commercial purposes. The need to link statically prevents you from creating F# library under any realistic circumstances. Stefan

  4. Back to top

    Re: F#: Two Remarkable Years

    Jan 11, 2007 8:55 AM by Eirik Mangseth

    Don -- I'm not disputing the info in the underlying article (found here ).

    I'm fully aware of the research that's been (and is) going on and it's implementation in e.g. Rotor.

    I was merely pointing out that the statement "F# can also claim to be the first .NET language (my emphasis) to support generics" isn't true. For it to be true, it should have said something like "F# can also claim to be the first .NET language to utilise CLR-generics" or something similar. I would still claim that the first .Net language supporting generics was Eiffel. That you added support for generics was great news. If only the CLR would support MI as well :-) (perhaps you could pick up a few ideas from Eiffel's implementation of MI). As an end note, it is nice to see functional programming being brought into the mainstream and it is interesting to see that it is Microsoft who's doing so. Regards, Eirik "If I can't Eiffel in heaven, I won't go"

  5. Back to top

    Re: Two Remarkable Problems...

    Jan 27, 2007 5:34 PM by Alex Peake

    "F# does not support meta-programming" -- see http://tomasp.net/articles/fsclassmeta.aspx and http://research.microsoft.com/~dsyme/papers/ml03-syme.ps

  6. Back to top

    Re: Two Remarkable Problems...

    Feb 13, 2007 3:42 AM by Stefan Wenig

    Alex, while this looks interresting, i don't think it goes far beyond C# 3.0's Expression construct. I want to be able to code without quotations, and have some metaprogramming rules applied to the code afterwards. I don't think quotations would solve any of my real problems.

Exclusive Content

VMware Infrastructure 3 Book Excerpt and Author Interview

VMware Infrastructure 3: Advanced Technical Design Guide and Advanced Operations Guide provides a wealth of practical insights into setting up virtualization in todays corporate environments.

Architectures of extraordinarily large, self-sustaining systems

Can a system that is so large it cannot be comprehended be "designed" in a conventional sense? The foundations of computing are about to change. In this talk, Richard P. Gabriel explores why and how.

Using Ruby Fibers for Async I/O: NeverBlock and Revactor

Ruby 1.9's Fibers and non-blocking I/O are getting more attention - we talked to Mohammad A. Ali of the NeverBlock project and Tony Arcieri of the Revactor project.

Agile and Beyond - The Power of Aspirational Teams

Tim Mackinnon talks about the aspirations behind the Agile principles and practices, the desire to become efficient, to write quality code which does not end up being thrown away.

Concurrency: Past and Present

Brian Goetz discusses the difficulties of creating multithreaded programs correctly, incorrect synchronization, race conditions, deadlock, STM, concurrency, alternatives to threads, Erlang, Scala.

ActionScript 3 for Java Programmers

Often the hardest part of changing technologies is language syntax differences. This new article provides Java developers with a transition guide to Actionscript which forms the foundation of Flex.

Neal Ford On Programming Languages and Platforms

Neal Ford talks about having multiple languages running on one of the two major platforms: Java and .NET. He also presents the advantages offered by Ruby compared to static languages like Java or C#.

Future Directions for Agile

David Anderson talks about the history of Agile, the current status of it and his vision for the future. The role of Agile consists in finding ways to implement its principles.