| Why over OCaml? * Easy multi-platform targetting and platform bindings without fuss. * Mature and supported BCL and 3rd party libraries * Access to the .NET ecosystem tooling like profilers, debuggers etc * Easy to use Native FFI without having to write boilerplate C stubs * Active Patterns * Built-in Units of measure without perf cost. * Built-in support for Unboxed Structs with Layout control and operator overloading * Unboxed floats, not just for 64 bit ones syntactically present in arrays * Built-in control over inlining * 32 bit ints not 31 * Type Providers allowing typed access to untyped data and much more [F# 3.0: Data, Services, Web, Cloud... at Your Fingertips] (http://channel9.msdn.com/Events/TechEd/Europe/2012/DEV338) http://www.navision-blog.de/2012/03/25/typed-access-to-json-... http://www.navision-blog.de/2012/03/22/wpf-designer-for-f/ http://blogs.msdn.com/b/dsyme/archive/2012/08/03/access-stat... * Built-in support for runtime code quotions, with code inspection * Built-in support for runtime reflection * OOP abstractions without perf loss * Built-in support for Operator overloading * Polymorphic print function * Mature Multicore friendly runtimes * mutable local variables on the stack * Cleaned up offside-rule indent based syntax with optional OCaml style override. * Partial application of Discriminated Unions like List.map Some [1; 2; 3] In OCaml you have todo List.map (fun x -> Some x) [1; 2; 3] * Methods on Records and Discriminated Unions * Extension Methods * Built-in syntax for Array slicing * Built-in syntax for sequence based for loops * Built-in syntax for List / Array range construction like [1 .. 10] * Extensible computation expression syntax for more than just monads. |