[Fwd: F#]

Paul Hudak paul.hudak@yale.edu
Thu, 30 May 2002 09:11:59 -0400


This is a multi-part message in MIME format.
--------------D52C629A5FF3EA7211C501A7
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hey Simon et al at Micro$oft, when will there be an H#?
(Ok, I'll settle for Haskell.NET :-)

  -Paul
--------------D52C629A5FF3EA7211C501A7
Content-Type: message/rfc822
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Return-Path: <swilliam@microsoft.com>
Received: from mr2.its.yale.edu (mr2.its.yale.edu [130.132.50.8])
	by netra.cs.yale.edu (Pro-8.9.3/Pro-8.9.3) with ESMTP id MAA21348
	for <hudak-paul@cs.yale.edu>; Wed, 29 May 2002 12:29:07 -0400
Received: from mail2.microsoft.com (mail2.microsoft.com [131.107.3.124])
	by mr2.its.yale.edu (8.11.6/8.11.6) with ESMTP id g4TGT6c08547
	for <hudak-paul@yale.edu>; Wed, 29 May 2002 12:29:06 -0400 (EDT)
Received: from INET-VRS-02.redmond.corp.microsoft.com ([157.54.8.110]) by mail2.microsoft.com with Microsoft SMTPSVC(5.0.2195.4905);
	 Wed, 29 May 2002 09:29:00 -0700
Received: from 157.54.8.155 by INET-VRS-02.redmond.corp.microsoft.com (InterScan E-Mail VirusWall NT); Wed, 29 May 2002 09:29:00 -0700
Received: from red-msg-05.redmond.corp.microsoft.com ([157.54.12.72]) by inet-hub-04.redmond.corp.microsoft.com with Microsoft SMTPSVC(5.0.2195.4905);
	 Wed, 29 May 2002 09:28:59 -0700
X-MimeOLE: Produced By Microsoft Exchange V6.0.6177.0
content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----_=_NextPart_001_01C2072D.EF788099"
Subject: F#
Date: Wed, 29 May 2002 09:28:59 -0700
Message-ID: <8DC4B82A94A29D4AB708F05E0EB557AB037900C2@red-msg-05.redmond.corp.microsoft.com>
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: F#
Thread-Index: AcIHLe8woxMJQTwbSBGsj4JuKslMfA==
From: "Scott Williams" <swilliam@microsoft.com>
To: <hudak-paul@yale.edu>
X-OriginalArrivalTime: 29 May 2002 16:28:59.0839 (UTC) FILETIME=[EFD45CF0:01C2072D]

This is a multi-part message in MIME format.

------_=_NextPart_001_01C2072D.EF788099
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_002_01C2072D.EF788099"


------_=_NextPart_002_01C2072D.EF788099
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Paul, I just saw this, and I think you and I were talking about using
ML.  Let me know if we need to follow-up on this further.
=20
Scott
=20
  _____ =20

F#

    <http://research.microsoft.com/projects/ilx/absil.htm>  =20
<http://research.microsoft.com/projects/ilx/ilx.htm>=20

Sections=20

Up <http://research.microsoft.com/projects/ilx/index.htm>=20
F# FAQ <http://research.microsoft.com/projects/ilx/fsharp-faq.htm>=20
About F# <http://research.microsoft.com/projects/ilx/fsharp-ack.htm>=20
Download F#
<http://research.microsoft.com/projects/ilx/fsharp-release.htm>=20
F# Manual <http://research.microsoft.com/projects/ilx/fsharp-manual.htm>

F# Compared
<http://research.microsoft.com/projects/ilx/fsharp-language-compare.htm>

F# Tool Support
<http://research.microsoft.com/projects/ilx/fsharp-ergonomics.htm>=20
F# Performance
<http://research.microsoft.com/projects/ilx/fsharp-perf.htm> =20

Announcements=20

A presentation on F#
<http://research.microsoft.com/projects/ilx/Fsharp-v6.ppt>  is now
available (April 2002)

Coming soon: The First F# Language Release
<http://research.microsoft.com/projects/ilx/fsharp.htm>  (April 2002)

A new version of the ILX reference manual
<http://research.microsoft.com/projects/ilx/ilx-ref.doc>  is available.
This is considerably updated from previous versions (January 2002)

Version 0.5 of the AbsIL/ILX SDK is now available
<http://research.microsoft.com/downloads> .(April 2002)

=20

=20

	F# is a mixed functional/imperative programming language based
on the design of the functional language Caml <http://caml.inria.fr>
and the .NET language C#.


Combining the speed, safety and productivity of ML and Caml with the
libraries, tools and cross-language working of .NET

Mixed functional/imperative programming is a fantastic paradigm for many
programming tasks.  Languages such as OCaml and Standard ML provide
excellent general purpose programming languages suited to
medium-advanced programmers who want simple yet highly expressive tools
that boost their productivity, primarily by reducing the error rate,
increasing their productivity through type inference, and basically
letting them focus on the difficult parts of their applications.

You can access hundreds of .NET libraries using F#. =20

F# is an implementation of the core of the Caml programming language for
the .NET Framework, along with cross-language extensions.  The aim is to
have it work together seamlessly with C#, Visual Basic, SML.NET and
other .NET programming languages.  In particular it is the first ML
language where all the types and values in an ML program can be accessed
from some significant languages (e.g. C#) in a predictable and friendly
way.

The aim of F# is to have a mixed functional-  imperative language that
works together seamlessly with C# and other .NET languages.

Purely functional languages like Haskell are excellent within certain
niches, but many simple programming exercises can quickly turn into
problems that require a PhD. to solve.  Purely imperative programming
languages like C or Pascal do not provide satisfying mechanisms for
abstraction or data manipulation.  Purely object oriented languages like
Smalltalk are excellent for some dynamic applications but do not provide
static guarantees.  Typed class-based languages like C# and Java contain
a very large number of constructs, and it can sometimes be difficult for
programmers to choose how to model their problem, and sometimes result
in very large amounts of code just to solve quite simple problems.  In
contrast, languages such as Caml provide a smaller number of simple,
orthogonal constructs which work together to allow for succinct yet
efficient solutions to programming problems.

F# provides an implementation of a subset of the OCaml libraries as well
as the ability to access .NET libraries.  Using the .NET libraries is
optional.

F# provides a subset of the OCaml libraries, so you don't have to use
.NET libraries if it is not appropriate.  It is possible to write large
applications that can be cross-compiled as either OCaml bytecode, OCaml
native code or F# code, for example, the F# compiler itself is written
this way.  This lets you reuse the investment you make in the core of a
project while letting you write some parts of your application as F#
code that makes use of .NET extensions.=20

The following links will let you learn more about F#:

 	 Basic programming in F#
<http://research.microsoft.com/projects/ilx/fsharp-manual.htm>=20

	 Using C# and other .NET libraries from F#
<http://research.microsoft.com/projects/ilx/fsharp-manual-import-interop
.htm>=20

	 Using F# libraries from C#
<http://research.microsoft.com/projects/ilx/fsharp-manual-export-interop
.htm>=20

	 Using the F# library

	 To access .NET constructs, see the extra language features
supported in this release
<http://research.microsoft.com/projects/ilx/fsharp-manual-extras.htm> .

	 Learn how to write high-performance
<http://research.microsoft.com/projects/ilx/fsharp-perf.htm>  F# code

 F# also provides a simple, familiar set of tools:

	 A simple command line compiler, supporting separate
compilation, debug information and optimization.

	 F# supports features that are often missing from ML
implementations such as Unicode strings and dynamic linking.  It also
supports reflection to a limited degree, though only via .NET libraries.

	 Tool support is strong when combined with tools from the
(freely available) .NET Framework and/or Microsoft's Visual Studio.  For
example the DbgClr.EXE tool in the .NET Framework SDK gives you a
graphical debugger for F#.

F# is, as far as I know, the first ML compiler to have good
binary-compatibility and versioning properties, e.g.

	 You can build DLLs (many ML compilers do not allow this)

	 There is full fidelity between F# code in a DLL and F# code
that calls the DLL (i.e. you can use F# constructs across the DLL
boundary without any problems);

	 You can add a value to a module and the binaries produced are
compatible. =20

	 You can modify the internals of a module and the binaries will
remain comaptible.  The binary compatibility properties deteriorate if
cross-module optimization is used). =20

F# also happens to be the first released .NET language that is able to
produce Generic IL <http://research.microsoft.com/projects/clrgen> , and
the compiler was really designed with this target language in mind.
However the compiler can also produce standard .NET binaries, which is
just as well because there is no publicly available release of a .NET
Common Language Runtime for .NET that supports generics.=20

Design-wise, F# is essentially a .NET implementation of the core of the
OCaml programming language, with some minor design changes.  The design
extends the core OCaml language by making some guarantees about how ML
constructs appear to .NET languages and by allowing the programmer to
access .NET libraries, primarily via an extended "." notation (e.g.
"val.ToString()" to call a .NET method).  For a full feature comparison
see the following pages:

	 Compare F#, SML and OCaml as languages
<http://research.microsoft.com/projects/ilx/fsharp-language-compare.htm>
..

	 Compare these as programming environments
<http://research.microsoft.com/projects/ilx/fsharp-ergonomics.htm> ,
i.e. including debugging, compiling etc.

	 Compare F# and C#
<http://research.microsoft.com/projects/ilx/fsharp-csharp-java.htm>=20


------_=_NextPart_002_01C2072D.EF788099
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Message</TITLE><BASE=20
href=3Dhttp://research.microsoft.com/projects/ilx/fsharp.htm>
<META http-equiv=3DContent-Language content=3Den-gb>
<META content=3D"MSHTML 6.00.2716.2200" name=3DGENERATOR>
<META content=3DFrontPage.Editor.Document name=3DProgId>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<META content=3D"arcs2 000, default" name=3D"Microsoft Theme">
<META content=3D"tl, default" name=3D"Microsoft Border"></HEAD>
<BODY text=3D#263a7f vLink=3D#ff3aff aLink=3D#ff3a00 link=3D#263aff =
bgColor=3D#ffffff>
<DIV><SPAN class=3D270422716-29052002><FONT color=3D#000000>Paul, I just =
saw this,=20
and I think you and I were talking about using ML.&nbsp; Let me know if =
we need=20
to follow-up on this further.</FONT></SPAN></DIV>
<DIV><SPAN class=3D270422716-29052002><FONT=20
color=3D#000000></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=3D270422716-29052002><FONT=20
color=3D#000000>Scott</FONT></SPAN></DIV>
<DIV>&nbsp;</DIV>
<HR>
<!--msnavigation-->
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" border=3D0>
  <TBODY>
  <TR>
    <TD><!--mstheme-->
      <P align=3Dcenter><B><FONT color=3D#000000 =
size=3D6>F#</FONT></B></P>
      <P align=3Dcenter><IMG height=3D60 alt=3DF#=20
      src=3D"_derived/fsharp.htm_cmp_arcs110_hbtn_p.gif" width=3D140 =
align=3Dmiddle=20
      border=3D0>
      <SCRIPT language=3DJavaScript><!--
MSFPhover =3D=20
  (((navigator.appName =3D=3D "Netscape") &&=20
  (parseInt(navigator.appVersion) >=3D 3 )) ||=20
  ((navigator.appName =3D=3D "Microsoft Internet Explorer") &&=20
  (parseInt(navigator.appVersion) >=3D 4 )));=20
function MSFPpreload(img)=20
{
  var a=3Dnew Image(); a.src=3Dimg; return a;=20
}
// --></SCRIPT>

      <SCRIPT language=3DJavaScript><!--=0A=
if(MSFPhover) { =
MSFPnav1n=3DMSFPpreload("_derived/absil.htm_cmp_arcs110_hbtn.gif"); =
MSFPnav1h=3DMSFPpreload("_derived/absil.htm_cmp_arcs110_hbtn_a.gif"); }=0A=
// --></SCRIPT>
       <A language=3DJavaScript=20
      onmouseover=3D"if(MSFPhover) =
document['MSFPnav1'].src=3DMSFPnav1h.src"=20
      onmouseout=3D"if(MSFPhover) =
document['MSFPnav1'].src=3DMSFPnav1n.src"=20
      href=3D"absil.htm"><IMG height=3D60 alt=3D"Abstract IL"=20
      src=3D"_derived/absil.htm_cmp_arcs110_hbtn.gif" width=3D140 =
align=3Dmiddle=20
      border=3D0 name=3DMSFPnav1></A>
      <SCRIPT language=3DJavaScript><!--=0A=
if(MSFPhover) { =
MSFPnav2n=3DMSFPpreload("_derived/ilx.htm_cmp_arcs110_hbtn.gif"); =
MSFPnav2h=3DMSFPpreload("_derived/ilx.htm_cmp_arcs110_hbtn_a.gif"); }=0A=
// --></SCRIPT>
       <A language=3DJavaScript=20
      onmouseover=3D"if(MSFPhover) =
document['MSFPnav2'].src=3DMSFPnav2h.src"=20
      onmouseout=3D"if(MSFPhover) =
document['MSFPnav2'].src=3DMSFPnav2n.src"=20
      href=3D"ilx.htm"><IMG height=3D60 alt=3DILX=20
      src=3D"_derived/ilx.htm_cmp_arcs110_hbtn.gif" width=3D140 =
align=3Dmiddle=20
      border=3D0=20
  =
name=3DMSFPnav2></A></P><!--mstheme--></TD></TR><!--msnavigation--></TBOD=
Y></TABLE><!--msnavigation-->
<TABLE dir=3Dltr cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
border=3D0>
  <TBODY>
  <TR>
    <TD vAlign=3Dtop width=3D"1%"><!--mstheme--><FONT face=3DArial>
      <DIV=20
      style=3D"WIDTH: 116px; BORDER-TOP-STYLE: ridge; =
BORDER-RIGHT-STYLE: ridge; BORDER-LEFT-STYLE: ridge; HEIGHT: 142px; =
BORDER-BOTTOM-STYLE: ridge"><FONT=20
      size=3D2><B>Sections</B></FONT>
      <P><FONT size=3D2><NOBR><A href=3D"index.htm"=20
      target=3D"">Up</A></NOBR><BR><NOBR><A href=3D"fsharp-faq.htm"=20
      target=3D"">F#&nbsp;FAQ</A></NOBR><BR><NOBR><A =
href=3D"fsharp-ack.htm"=20
      target=3D"">About&nbsp;F#</A></NOBR><BR><NOBR><A =
href=3D"fsharp-release.htm"=20
      target=3D"">Download&nbsp;F#</A></NOBR><BR><NOBR><A =
href=3D"fsharp-manual.htm"=20
      target=3D"">F#&nbsp;Manual</A></NOBR><BR><NOBR><A=20
      href=3D"fsharp-language-compare.htm"=20
      target=3D"">F#&nbsp;Compared</A></NOBR><BR><NOBR><A=20
      href=3D"fsharp-ergonomics.htm"=20
      target=3D"">F#&nbsp;Tool&nbsp;Support</A></NOBR><BR><NOBR><A=20
      href=3D"fsharp-perf.htm" =
target=3D"">F#&nbsp;Performance</A></NOBR>=20
      </FONT></P></DIV>
      <DIV=20
      style=3D"WIDTH: 115px; BORDER-TOP-STYLE: ridge; =
BORDER-RIGHT-STYLE: ridge; BORDER-LEFT-STYLE: ridge; HEIGHT: 383px; =
BORDER-BOTTOM-STYLE: ridge"><B><FONT=20
      size=3D2>Announcements</FONT></B>
      <P><I><FONT style=3D"FONT-SIZE: 9pt" face=3DVerdana>A <A=20
      href=3D"Fsharp-v6.ppt">presentation on F#</A> is now available =
(April=20
      2002)</FONT></I></P>
      <P><I><FONT style=3D"FONT-SIZE: 9pt" face=3DVerdana>Coming soon: =
<A=20
      href=3D"fsharp.htm">The First F# Language Release</A> (April=20
      2002)</FONT></I></P>
      <P><FONT style=3D"FONT-SIZE: 9pt" face=3DVerdana><I>A new version =
of the <A=20
      href=3D"ilx-ref.doc">ILX reference manual</A> is available.&nbsp; =
This is=20
      considerably updated from previous versions (January=20
      2002)</I></FONT></P><FONT style=3D"FONT-SIZE: 9pt" face=3DVerdana>
      <P align=3Dleft><I>Version 0.5 of the AbsIL/ILX SDK is <A=20
      href=3D"http://research.microsoft.com/downloads">now =
available</A>.(April=20
      2002)</I></P></DIV></FONT>
      <P>&nbsp;</P>
      <P>&nbsp;</P><!--mstheme--></FONT></TD>
    <TD vAlign=3Dtop width=3D24></TD><!--msnavigation-->
    <TD vAlign=3Dtop><!--mstheme--><FONT face=3DArial>
      <DIV=20
      style=3D"BORDER-RIGHT: 3px ridge; PADDING-RIGHT: 4px; BORDER-TOP: =
3px ridge; PADDING-LEFT: 4px; FLOAT: right; PADDING-BOTTOM: 1px; =
BORDER-LEFT: 3px ridge; WIDTH: 197px; PADDING-TOP: 1px; BORDER-BOTTOM: =
3px ridge; HEIGHT: 82px">
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><B><I><FONT=20
      size=3D2>F# is a mixed functional/imperative programming language =
based on=20
      the design of the functional language <A=20
      href=3D"http://caml.inria.fr">Caml</A> and the .NET language=20
      C#.</FONT></I></B></P></DIV>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"=20
      align=3Dcenter><B><I><BR>Combining</I></B><I><B> the speed, safety =
and=20
      productivity of ML and Caml with the libraries, tools and =
cross-language=20
      working of .NET</B></I></P>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT=20
      size=3D2>Mixed functional/imperative programming is a fantastic =
paradigm for=20
      many programming tasks.&nbsp; Languages such as OCaml and Standard =
ML=20
      provide excellent general purpose programming languages suited to=20
      medium-advanced programmers who want simple yet highly expressive =
tools=20
      that boost their productivity, primarily by reducing the error =
rate,=20
      increasing their productivity through type inference, and =
basically=20
      letting them focus on the difficult parts of their=20
applications.</FONT></P>
      <DIV=20
      style=3D"BORDER-RIGHT: 3px ridge; PADDING-RIGHT: 4px; BORDER-TOP: =
3px ridge; PADDING-LEFT: 4px; FLOAT: right; PADDING-BOTTOM: 1px; =
BORDER-LEFT: 3px ridge; WIDTH: 158px; PADDING-TOP: 1px; BORDER-BOTTOM: =
3px ridge; HEIGHT: 56px">
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><I><B><FONT=20
      size=3D2>You can access hundreds of .NET libraries using F#.&nbsp; =

      </FONT></B></I></P></DIV>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT =
size=3D2>F#=20
      is an implementation of the core of the Caml programming language =
for the=20
      .NET Framework, along with cross-language extensions.&nbsp; The =
aim is to=20
      have it work together seamlessly with C#, Visual Basic, SML.NET =
and other=20
      .NET programming languages.&nbsp; In particular it is the first ML =

      language where all the types and values in an ML program can be =
accessed=20
      from some significant languages (e.g. C#) in a predictable and =
friendly=20
      way.</FONT></P>
      <DIV=20
      style=3D"FLOAT: right; WIDTH: 170px; BORDER-TOP-STYLE: ridge; =
BORDER-RIGHT-STYLE: ridge; BORDER-LEFT-STYLE: ridge; HEIGHT: 64px; =
BORDER-BOTTOM-STYLE: ridge">
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><I><B><FONT=20
      size=3D2>The aim of F# is to have a mixed functional-&nbsp; =
imperative=20
      language that works together seamlessly with C# and other .NET=20
      languages.</FONT></B></I></P></DIV>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT=20
      size=3D2>Purely functional languages like Haskell are excellent =
within=20
      certain niches, but many simple programming exercises can quickly =
turn=20
      into problems that require a PhD. to solve.&nbsp; Purely =
imperative=20
      programming languages like C or Pascal do not provide satisfying=20
      mechanisms for abstraction or data manipulation.&nbsp; Purely =
object=20
      oriented languages like Smalltalk are excellent for some dynamic=20
      applications but do not provide static guarantees.&nbsp; Typed =
class-based=20
      languages like C# and Java contain a very large number of =
constructs, and=20
      it can sometimes be difficult for programmers to choose how to =
model their=20
      problem, and sometimes result in very large amounts of code just =
to solve=20
      quite simple problems.&nbsp; In contrast, languages such as Caml =
provide a=20
      smaller number of simple, orthogonal constructs which work =
together to=20
      allow for succinct yet efficient solutions to programming=20
      problems.</FONT></P>
      <DIV=20
      style=3D"FLOAT: right; WIDTH: 165px; BORDER-TOP-STYLE: ridge; =
BORDER-RIGHT-STYLE: ridge; BORDER-LEFT-STYLE: ridge; HEIGHT: 100px; =
BORDER-BOTTOM-STYLE: ridge">
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><I><B><FONT=20
      size=3D2>F# provides an implementation of a subset of the OCaml =
libraries as=20
      well as the ability to access .NET libraries.&nbsp; Using the .NET =

      libraries is optional.</FONT></B></I></P></DIV>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT =
size=3D2>F#=20
      provides a subset of the OCaml libraries, so you don't have to use =
.NET=20
      libraries if it is not appropriate.&nbsp; It is possible to write =
large=20
      applications that can be cross-compiled as either OCaml bytecode, =
OCaml=20
      native code or F# code, for example, the F# compiler itself is =
written=20
      this way.&nbsp; This lets you reuse the investment you make in the =
core of=20
      a project while letting you write some parts of your application =
as F#=20
      code that makes use of .NET extensions. </FONT></P>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT =
size=3D2>The=20
      following links will let you learn more about=20
      F#:</FONT></P><!--mstheme--></FONT><!--msthemelist-->
      <TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
border=3D0><!--msthemelist-->
        <TBODY>
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2><A href=3D"fsharp-manual.htm">Basic programming in=20
            =
F#</A></FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--mst=
hemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2><A href=3D"fsharp-manual-import-interop.htm">Using =
C# and other=20
            .NET libraries from =
F#</A></FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--mst=
hemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2><A href=3D"fsharp-manual-export-interop.htm">Using =
F# libraries=20
            from =
C#</A></FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--mst=
hemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>Using the F# =
library</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--ms=
themelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>To access .NET constructs, see the <A=20
            href=3D"fsharp-manual-extras.htm">extra language features =
supported in=20
            this=20
          =
release</A>.</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><=
!--msthemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>Learn <A href=3D"fsharp-perf.htm">how to write=20
            high-performance</A> F# =
code</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthe=
melist--></TBODY></TABLE><!--mstheme--><FONT=20
      face=3DArial>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT=20
      size=3D2>&nbsp;F# also provides a simple, familiar set of =
tools:</FONT></P><!--mstheme--></FONT><!--msthemelist-->
      <TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
border=3D0><!--msthemelist-->
        <TBODY>
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>A simple command line compiler, supporting separate =

            compilation, debug information and =
optimization.</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR>=
<!--msthemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>F# supports features that are often missing from ML =

            implementations such as Unicode strings and dynamic =
linking.&nbsp;=20
            It also supports reflection to a limited degree, though only =
via=20
            .NET=20
        =
libraries.</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!-=
-msthemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>Tool support is strong when combined with tools =
from the=20
            (freely available) .NET Framework and/or Microsoft's Visual=20
            Studio.&nbsp; For example the DbgClr.EXE tool in the .NET =
Framework=20
            SDK gives you a graphical debugger for=20
            =
F#.</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthem=
elist--></TBODY></TABLE><!--mstheme--><FONT=20
      face=3DArial>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none">F#<FONT =
size=3D2>=20
      is, as far as I know, the first ML compiler to have good=20
      binary-compatibility and versioning properties, =
e.g.</FONT></P><!--mstheme--></FONT><!--msthemelist-->
      <TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
border=3D0><!--msthemelist-->
        <TBODY>
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>You can build DLLs (many ML compilers do not allow=20
            =
this)</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msth=
emelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>There is full fidelity between F# code in a DLL and =
F# code=20
            that calls the DLL (i.e. you can use F# constructs across =
the DLL=20
            boundary without any =
problems);</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!-=
-msthemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>You can add a value to a module and the binaries =
produced are=20
            compatible.&nbsp;=20
          =
</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemeli=
st-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2>You can modify the internals of a module and the =
binaries=20
            will remain comaptible.&nbsp; The binary compatibility =
properties=20
            deteriorate if cross-module optimization is used).&nbsp; =
</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthemeli=
st--></TBODY></TABLE><!--mstheme--><FONT=20
      face=3DArial>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT =
size=3D2>F#=20
      also happens to be the first released .NET language that is able =
to=20
      produce <A =
href=3D"http://research.microsoft.com/projects/clrgen">Generic=20
      IL</A>, and the compiler was really designed with this target =
language in=20
      mind. However the compiler can also produce standard .NET =
binaries, which=20
      is just as well because there is no publicly available release of =
a .NET=20
      Common Language Runtime for .NET that supports generics. =
</FONT></P>
      <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: none"><FONT=20
      size=3D2>Design-wise, F# is essentially a .NET implementation of =
the core of=20
      the OCaml programming language, with some minor design =
changes.&nbsp; The=20
      design extends the core OCaml language by making some guarantees =
about how=20
      ML constructs appear to .NET languages and by allowing the =
programmer to=20
      access .NET libraries, primarily via an extended "." notation =
(e.g.=20
      "val.ToString()" to call a .NET method).&nbsp; For a full feature=20
      comparison see the following =
pages:</FONT></P><!--mstheme--></FONT><!--msthemelist-->
      <TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
border=3D0><!--msthemelist-->
        <TBODY>
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><A=20
            href=3D"fsharp-language-compare.htm"><FONT size=3D2>Compare =
F#, SML and=20
            OCaml as languages</FONT></A><FONT =
size=3D2>..</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!=
--msthemelist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2><A href=3D"fsharp-ergonomics.htm">Compare these as =
programming=20
            environments</A>, i.e. including debugging, compiling=20
etc.</FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--msthe=
melist-->
        <TR>
          <TD vAlign=3Dbaseline width=3D42><IMG height=3D15 alt=3Dbullet =
hspace=3D13=20
            src=3D"_themes/arcs2/arcbul1d.gif" width=3D15></TD>
          <TD vAlign=3Dtop width=3D"100%"><!--mstheme--><FONT =
face=3DArial>
            <P style=3D"MARGIN-LEFT: 0in; mso-layout-grid-align: =
none"><FONT=20
            size=3D2><A href=3D"fsharp-csharp-java.htm">Compare F# and=20
            =
C#</A></FONT></P><!--mstheme--></FONT><!--msthemelist--></TD></TR><!--mst=
hemelist--></TBODY></TABLE><!--mstheme--><FONT=20
      =
face=3DArial><!--mstheme--></FONT><!--msnavigation--></TD></TR><!--msnavi=
gation--></TBODY></TABLE></BODY></HTML>
=00
------_=_NextPart_002_01C2072D.EF788099--

------_=_NextPart_001_01C2072D.EF788099
Content-Type: image/gif;
	name="fsharp.htm_cmp_arcs110_hbtn_p.gif"
Content-Transfer-Encoding: base64
Content-Description: fsharp.htm_cmp_arcs110_hbtn_p.gif
Content-Location: http://research.microsoft.com/projects/ilx/_derived/fsharp.htm_cmp_arcs110_hbtn_p.gif

R0lGODlhjAA8AOMAAMzM/5mZ/5nM/2aZ/2aZzDOZzGbM/zOZ/zPM/5nMzMz//8zMzMDAwDMzMwAA
AAAAACH5BAEAAAwALAAAAACMADwAQAT+kMlJq7046827/2AojmRpUoBwHIYAnPClCIIxrHg+DIIS
/yZV7jB4hWa3Ic5gBDqfHEVSKbAICMrVwAftNBqXr/jb3cyyuOYlMc1Vy/BTyoAm9uCC9lYyq+10
Oy00Li4AhgoAiIqEgzQ2Nm11gYOJXHGXmJmam5ydnp8VCog0AzZ1gAYGAYI0KYmvioayjI6pQ5Mu
fHpvUIimWaW5oKBCShvFSjybZGFjzMNSaHsVWFm8w9gVeXUtIwnW2TGjkbetluETc3bn6O3u7/Dx
7z6w8p6xo42PgaX9j42UXIjiUAMHDXsM8v05xWogO1CI1ACIVOTSOEktEiE8oYAOlRL+viQJ2xgH
gMdbHrahGVnG2TMJYBjEDIdsyLUKE+vczORypkyY2U4qMaChWrKHnF5SiOkzk0luajKwAUbSokly
BqOG+PaxKomL0jJiSmB0BVEKAsP5iEgKK45gae3NOMnETMQ+AFvorVHjEStKoioh9eokMCLCiBMr
Xsy4sePHkCNn69NisGQglk3kZMFSMttBkNyeGn1rByWN2nTsjJcv9ClcrSp1WZvI0R8DXDrazJxp
FCSMAlETVpCFN5A5onncuSwBQJazhUmFjcscA1boIFU+71xdQ7QsI5BwW949RM0lH8Sv1FoexHkt
7HEKHVIXk9IKTNFpp89hfg7sPDWdNUFP2LynRWZkSWNcF/fJ5BIom4GjAQBl6bBgSwIC9ZMn+9nU
wVQStifCXCJ9cAUaF4rIR4f/rUZQASGqKEMKybkIAoUxqkiZSML9sECFRJRnG3ApnsCVDooFJt1r
5mSTwHy8OLcDXK8k1AtbKbQ1AALS9GNOkZ+oZ4cFSvb1C2loAgMXYGBWRaNZ8f3Qpoyh5EEdnXjm
qeeefIIQAQA7

------_=_NextPart_001_01C2072D.EF788099
Content-Type: image/gif;
	name="absil.htm_cmp_arcs110_hbtn.gif"
Content-Transfer-Encoding: base64
Content-Description: absil.htm_cmp_arcs110_hbtn.gif
Content-Location: http://research.microsoft.com/projects/ilx/_derived/absil.htm_cmp_arcs110_hbtn.gif

R0lGODlhjAA8AMIAAP//zP//mf/MZv/MzP/MmcDAwDMzMwAAACH5BAEAAAUALAAAAACMADwAQAP+
WLrc/jDKSau9OOvNu2cAQAgEAXzoAwxBKbwwXJphanNjTJ6ZqOsD3m1IrPxgAQfg+CJcDNAoVDGl
GhpRK6Oq7XIXX+y1W8kdTRJzDF1s20LqHyHo9q0XIVErPisFgkF5gnmBJgR7MyRMMjOBQm6QkZKT
lJWWl5gpgn1xciQzLSKDo4KAfy58foEKdk2PRK1nNZm0C50vEgABi2wRUltXWWC/UmNTVcXAWckO
XGEXA7xKi6+11g0tvNVlctdvcLcyf9veK7sl5N7q6+zt7u+5gvDXhKKHnJx7f+PyFXbo81itcLHo
U6gT6TDlAcEnoaYB4ZoEmBUQxS2HuSAWTFL+kdKSM/4IHuH4IMwzX2NSnCzwi2XKDbuYpPsoqwKy
lM6MmXy5s+WzlS6HaYjoBALNbhi+3GzpUpgVnWKYMmvaTFixZ7F09JIQ8wfGjpoi7uhwNAbYD+B4
Hfr6odOjFRTLgRN55h7bWiLMFJ2AkNApfIBDOYp7dtKgwogTK17MuLHjx5Ajn4V4iI5kxv+2Si5l
T2zBz1rROXrQlQTJjnD7FARFY2GbvixG5NibVXOmuatb32VX9sVuD7roag11uQFIWJR5TSxO4dZe
smJtM29es4fwNb+nM4h2PKRaC0Cnh3seQSMT8lXFPHn5AWhOstJyRTyNUulNMkKHOc3/3j2XTvYW
9CbDBESxdR8ZOb2XH4JQqQeBggFG5JCATSTFU4NBOWgfMPz9l2FJHlJAoSvUVacddNpAc96JG2Sl
FWHcHJFdcS5ihwKFM2KWl1o5SsCdVtoNdJ04ML7WCXpgbTIkI0Vikk0MQiwxW2VNalIPJ7lR2aMl
sdg2iB+zgSZmXboMtiU8aZHA4ll5lGDZmnDGKeecdE6SAAA7

------_=_NextPart_001_01C2072D.EF788099
Content-Type: image/gif;
	name="ilx.htm_cmp_arcs110_hbtn.gif"
Content-Transfer-Encoding: base64
Content-Description: ilx.htm_cmp_arcs110_hbtn.gif
Content-Location: http://research.microsoft.com/projects/ilx/_derived/ilx.htm_cmp_arcs110_hbtn.gif

R0lGODlhjAA8AMIAAP//zP//mf/MZv/MzP/MmcDAwDMzMwAAACH5BAEAAAUALAAAAACMADwAQAP+
WLrc/jDKSau9OOvNu2cAQAgEAXzoAwxBKbwwXJphanNjTJ6ZqOsD3m1IrPxgAQfg+CIULQbDIvqg
FqzPR+5okmxj3azYE/r+CMGsD7wIiVrmWSkQDLrvbruJAJ+RmDIzdkJjhYaHiImKi4yNDXdyZmck
My0ieJh3dXQucXN2CmtNhESiXDWOjpIvEgABgGGGWFgMVrSLA7BKgKSpvgstsL0Vkk6/KG4usHTD
vyuvJc3H09TV1tfYbXfZqXmXfJGRcHTM2xVr0dwFIQPKsOA10otuIHHyKSurMgGo6h+r91q1AyQg
iT9DS7icc/fDYJYotqQ0oHVr0Ssm0hKeWjT+S2IVj4z0kYig8UwqiBJRQrwCsmIpkbEkXPwR8CAy
kTs6lIxhk4wImHxq/qMJAtS0ZH7eWfL3U8a5dXk4hZtqaVC/ngjNYd3KtavXr2DDih1L9lc7PmnK
dkUXk6ymbzgJytUxYwU9BzNJOGQaRA7BSjTuFjnBLlgOY+vsOfuJM5pgrDtfCEUGZ1nbsgpLnV02
eewqxDobd1a74PPoxDBPk2aQK/PCd6tT6AMdYSAT2g89uozoK7LTViL3ytINstZKR76bTEjNqCME
lIxM6biXfKQj5w54H6qec/lt1bHrCbvQ2mR4DdLpXrWgD7xb0cgwnlfS9PZlFOXZrM7HkC5AP/cY
pIfbQZD0RxcNxwQTgxBLHIbWekO8Fclfn0CIjSmX4THHYXN1yIUJ5TzmVn0DzmcNUmmZqOKKLLbo
YhEJAAA7

------_=_NextPart_001_01C2072D.EF788099
Content-Type: image/gif;
	name="arcbul1d.gif"
Content-Transfer-Encoding: base64
Content-Description: arcbul1d.gif
Content-Location: http://research.microsoft.com/projects/ilx/_themes/arcs2/arcbul1d.gif

R0lGODlhDwAPAKL/AMzM/5nM/2aZ/2bM/zOZ/8z//8DAwAAAACH5BAEAAAYALAAAAAAPAA8AQAM0
aLrcHiTKARwrloEwRABYJl7AQAhe9ZgS8Y1wLDvFFgShAwitmyuFAK8l+AEhEo+oVmgqEgA7bkpt
JAAAOw==

------_=_NextPart_001_01C2072D.EF788099--

--------------D52C629A5FF3EA7211C501A7--