Version 0.6.4 of the F# compiler is now available from Microsoft
Research at http://research.microsoft.com/downloads.  A list of recent
changes is shown further below.  

It is recommended that you use F# with the recently version 1.1 of the
Microsoft .NET Framework (http://msdn.microsoft.com/netframework).  This
is also available via Windows Update.  

This release of the F# compiler can also be used with the SSCLI
(http://msdn.microsoft.com/net/sscli) and compiled binaries should
execute on all supported platforms.  Specify the --sscli flag to produce
debug files suitable for use with the SSCLI.  (The compiled binaries
should also work correctly with Mono but I have not tried this.)

A new sample is included that shows how to use F# in conjunction with
Malcolm Crowe's "CSTools" Lex and Yacc parsing tools.  This shows how
.NET style interop allows you to use tools which were originally
designed for C# with F# as well.  The actions for the CSTools grammars
are written in C#, but can create F# abstract syntax tree values
directly. 

On a similar topic, the DbgClr graphical debugger comes with the
downloadable .NET Framework SDK.  This debugger works very well with F#
code and I recommend it if you are not using Visual Studio.  

Thanks!
Don Syme
Microsoft Research, Cambridge


Changes: The F# compiler, v0.6 to v0.6.4

   a. Assembly version numbers can now be specified as an option to 
      the compiler.

   b. A number of bug fixes related to the hashing and comparison 
      functions that are automatically synthesized for each F# type.

   c. The calls required to create F# data values from C# have changed
      a little - MkCons() is now needed instead of Cons().  As with 
      other aspects of interop this may change in future releases.  

   d. Performance bugs have been fixed in relation to hashing.

   e. New samples have been included and the samples have been
documented.

   f. The SSCLI is now supported.

   g. The problems with "gacutil" in the installer should now be fixed.


Changes: The F# compiler, v0.5 to v0.6
   a. Vastly simplified import of .NET assemblies
   b. Much improved debugging support
   c. Debugging even on optimized code
   d. Multi-dimensional arrays
   e. Generic code generation
   f.  Full support for unverifiable flavour of code.
   g.  Explicit initialization no longer needed from C#
   h.  Imported F# assemblies no longer need to be mentioned when
linking
   i. Minor bug fixes
 
Details:
 
   a. Vastly simplified import of .NET assemblies
        Details: No more .cna files are required.  You can just
        reference a .NET assembly directly, e.g. by specifying "-r
foo.dll".
        Most of the .NET Framework assemblies are referenced 
        automatically.  Referencing a .NET assembly requires little
        or no overhead either at compile-time or runtime.
 
   b. Much improved debugging support
        Details: Sequence points are now generally accurate, and code
        ranges are also substantially better.  Breakpointing also works
        well.  Data display is better as many temporary variables
        are no longer shown.  I recommend using "DbgClr.exe" from the
        .NET Framework SDK or VisualStudio.NET itself.
 
        If symbol files cannot be found when attaching to a process
consider
        setting _NT_SYMBOL_PATH globally on your machine to include a
path
        both to your own symbols and to the "bin" directory of your F#
        installation.
 
   c. Debugging even on optimized code
        Details: Debugging is supported even if F# and JIT optimizations
        are enabled.  Thus, for example, you can attach to an F# process
        which has been compiled fully optimized and still largely use
the
        symbols produced during compilation to view data and add
        breakpoints.
 
   d. Multi-dimensional arrays
        Details: The syntax int[,] gives a two dimensional array.  The
        "Arr2" library gives the pseudo-parametric operations for these
        types.  These were added partly for interop with Microsoft
Excel, 
        which for one sample makes use of multi-dimensional arrays.
 
   e. Generic code generation
        Details: The compiler can now produce generic code for use with 
        Gyro and our internal versions of generics for the next version
        of the .NET CLR.  Furthermore the standard library comes
compiled
        in its generic flavours (see fslibg.dll, fslibptrg.dll and 
        fslibdelg.dll).  This has not been widely tested.  
 
   f.  Full support for unverifiable flavour of code.
        Details:  It is still not decided if ILX closures will be
        compiled to delegates or virtual functions.  In addition, the
        compilation to unverifiable code also has obvious uses.  Thus
        for the moment ILX and the F# compiler will both support
        3 flavours of generated code.
        The DLLs for the ILX and F# libraries follow a standard naming
        convention to indicate the flavour.  All the flavours are
        provided with the release, and all are pre-compiled and
installed.
            ilxlib.dll, fslib.dll:        virtual calls, non-generic
            ilxlibptr.dll, fslibptr.dll:  unverifiable calls,
non-generic
            ilxlibg.dll, fslibg.dll:        virtual calls, generic
      
   g.  Explicit initialization no longer needed from C#
        Details: Previously F# code required some explicit
initialization:
            System.Console.WriteLine(fslib._init.ToString());
            System.Console.WriteLine(absil._init.ToString());
        This is no longer required.  Initialization will happen when you

        touch any of the top level bindings for an F# module that are 
        computations (but not those that define lambda function
definitions).  
        The initialization code for that module then forces the
initialization 
        of all F# modules on which the given F# module depends (There is
always 
        a strict DAG of dependencies in F#: mutual recursion between F# 
        modules is not yet supported.  It's on the "todo" list.)
        However, if you want to force initialization for a particular 
        F# module you can still do so using
"System.Runtime.CompilerServices.
        RuntimeHelpers. RunClassConstructor" on a RuntimeTypeHandle for
the 
        corresponding F# module (you can get the RunClassConstructor 
        via a method on System.Type).
 
   h.  Imported F# assemblies no longer need to be mentioned when
linking
        Details: Previously the F# compiler required any F# assemblies
to 
        be mentioned when linking an F# program.  This is no longer
required:
        the appropriate initialization code is automatically inserted.
 
   i. Minor bug fixes
        - Problem with multiple conflicting references to mscorlib 
          now fixed.
        - Array comparison was not correctly implemented and 
          comparing arrays was raising a InvalidCastException
        - Added a better error message for the "dangling ;" condition
 
 

Reply via email to