F# released!

[ Update: F# 1.9.3 has been posted, and we don't expect any more 1.9.2 releases. ]

[ Update: the F# samples got dropped from this release - we'll be fixing that this week ]

[ Update: Granville has just posted a blog entry on how to get this version installing on Orcas Beta2 ]

[ Update: F# has been posted (MSI, ZIP). This one contains the samples. ]


[ Update: Known issues:

  • installation on Orcas Beta 2 - see above for workaround
  • problems with "--exec" on F# - fixed but not included in this release
  • problems with F# Interactive in Visual Studio on some localized machines - has been fixed and the fix will be in the next update
  • a minor problem compiling the Samples101 sample or any projects that use RESX files directly on the command line, see <cs.hubfs.net/forums/thread/3613.aspx> for workaround  
  • the ConcurrentLife sample is busted in the release. It will be fixed in later releases. Thanks to Ted Neward for pointing this out ]

About 8 days ago I gave a presentation at the Microsoft Faculty Summit, rounding off a major trip to Redmond for the F# Cambridge team. Whenever we give a major series of talks we like to release the version of F# we used at the talks. So, we've released F# in both MSI and ZIP formats (use the MSI on Windows, and the ZIP on Mono - see updated links for above). Also well done to James for pulling this release together.

Although we've put this through our standard test procedures, we haven't enabled this as the default download, partly because we're planning to make a couple of very minor tweaks to the new functionality (just a few library renamings).

So, here's what's new in 1.9.2! First the quick summary. I've also posted the complete release notes.

  • Slicing syntax. e.g. try arr.[1..5]. 2D-slices also available. No slice-setters as yet. See the full release notes.
  • Named Arguments. Calls to members (but not let-bound functions or function values) may use named arguments. Again see the full release notes. For example

                     System.Console.WriteLine(format="Hello {0}",arg0="World") 

  • Optional Arguments. Members (but not let-bound functions) may have optional arguments. See the full release notes.
  • Hashing and equality on F# values. Recall that F# automatically implements comparison and hash semantics for tuple, record and discriminated union types (only). Now F# will also implement Object.GetHashCode and Object.Equals for these types. See the full release notes.
  • Language cosntructs for "computation expressions" (akin to Haskell monadic syntax) . Details to follow in later posts (yes, I've whet your appetite, haven't I.... But this one needs a few separate blog entries...)
  • Library constructs for "asynchronous workflows". This is asynchronous and parallel programming using computation expressions. Details to follow in later posts again (those at the Faculty Summit and in Redmond last week have already seen a preview of this)

Other Language enhancements

  • Added "workflow" syntax updates. More details to follow.
  • Added [1..2] without spaces.
  • Added [< assembly : attributeExpr >] for assembly level attributes.
  • Added pattern matching on 64-bit numbers.
  • Added extension members (examples in F# programming library files control.fsi and control.fs).
  • Added datatype constructors used as first class functions.
  • Made begin/end optional for modules.
  • Made class/interface/struct-end optional in for type definitions.
  • Made with/end optional for type-augmentations.
  • Added __SOURCE_FILE__ and __LINE__.  

Library additions

  • Added Microsoft.FSharp.Plot.* interactive plotting previews.
  • Added Microsoft.FSharp.Collections.Permutation.
  • Added CodeDom provider.
  • Added typeof<ty>, sizeof<ty> as functions.
  • Adding ASP.NET samples.

Library minor changes

  • Additions to Seq module, e.g. orderBy, groupBy, countBy and sumByInt.
  • Additions to IEvent module, e.g. merge/split.
  • Additions to Quotations, added ReflectedTopDefn.
  • Added HashSet.Create for sequences.
  • Deprecated Idioms functions now available by other means.
  • Removed FlagsAttribute restriction on enum bit twiddling.
  • Deleted obsoleted CompatArray functions.

Bugs fixed:

  •     977 Fix: resx files compiled without change to cwd.
  •         Fix: FSI reflection emit support for constrained callvirt opcodes.
  •         Fix: Hashtbl copying bug.
  •         Fix: nested module/type loading bug.
  •         Fix: performance improvements to BigNat and BigInt.


Don, for the F# team...