F Sharp And O Caml
Last changed: -80.229.56.224

.

In short, F# is a subset of OCAML with natural extensions for .NET interopability.

F# aims to support core Caml compatibility. This is because OCAML is a fantastic language, popular and widely used. So cross compilation of codes within this subset is taken seriously. Several internal microsoft projects cross compile between the two languages.

F# also exists on .NET and providing smooth .NET interoperation is a key design goal. F# extends the core subset with .NET friendly features, such as resolving of .NET method overloads and use and authorship of .NET objects.

Occaisionally, the two aims give rise to minor conflicts. For example, for file I/O exceptions the .NET exceptions are kept to preserve their information.

F# extends Caml with the following features:

* Nominally subtyped objects

* Properties

* Operator overloading

* Run-time types

* Type-safe marshalling

* Concurrent threads

* Overloadable hashing and comparison functions

* Unlimited-length arrays and strings

* Unicode strings

* Standards-compliant XML parsing

* Interactive sessions compiled to native code

* Memory profiling

The following OCaml features are not in F#:

* Monomorphic types (e.g. '_a)

* Functors

* Structural subtyping

* Polymorphic variants

* Recursive types

* Recursive modules

* Typesetting (the Format module)

* Development environments supporting lex and yacc

* Unix library

* Macros (camlp4)

* Non-int numeric literals in patterns

* Named substrings in lexers