On 28-07-2012 18:07, Andrei Alexandrescu wrote:
On 7/28/12 10:04 AM, Paulo Pinto wrote:
On Saturday, 28 July 2012 at 12:42:47 UTC, Stuart wrote:
On Saturday, 28 July 2012 at 09:37:47 UTC, Paulo Pinto wrote:

I tend to favour F# instead of OCaml due to three things

I've never really seen the point of F#. Aside from maths, what is F#
good for that a standard imperative language is not? Especially when
you consider that all flavours of .NET have native support for LINQ.

Let me see:

- Symbolic code manipulation;
- Metaprogramming;
- Easy parallelization of code thanks to immutable data structures and
workflows
- Type providers (comming in F# 3.0) to manipulate remote data as
language data types
- The right way of doing type inference (shared by all ML languages)
- Asynchronous programming builtin without having to wait for ..NET 4.5
- Algebraic data types

Microsoft wouldn't have brought F# into Visual Studio if it wasn't worth
it, Microsoft is a business, not a language charity company.

It was for Basic :o). Anyhow, indeed, the tools around it make F# pretty
cool (just not all that original as a language).

Andrei

What makes you say that?

I guess that opinion stems from F# being based on OCaml's syntax? (But then to be fair, we would have to call D very unoriginal too...)

Either way, F# adds a *ton* of stuff on top of OCaml that makes it a far superior language:

* Reified generics: http://msdn.microsoft.com/en-us/library/dd233215(v=vs.110) * Inline functions (I'm still amazed D doesn't have this yet): http://msdn.microsoft.com/en-us/library/dd548047(v=vs.110) * Type extensions, a (IMO) much cleaner approach to artificially extending types: http://msdn.microsoft.com/en-us/library/dd233211(v=vs.110) * Pattern matching (oh how I miss this in compiler code): http://msdn.microsoft.com/en-us/library/dd547125(v=vs.110)
* Annotations: http://msdn.microsoft.com/en-us/library/dd233179(v=vs.110)
* Units of measure: http://msdn.microsoft.com/en-us/library/dd233243(v=vs.110) * Computation expressions (F#'s humanly understandable take on monads): http://msdn.microsoft.com/en-us/library/dd233182(v=vs.110) * Code quotations, making for metaprogramming that can do things even D's metaprogramming can't: http://msdn.microsoft.com/en-us/library/dd233212(v=vs.110) * Async workflows (actually a library solution built through computation expressions): http://msdn.microsoft.com/en-us/library/dd233250(v=vs.110) * Query expressions (again, based on computation expressions): http://msdn.microsoft.com/en-us/library/hh225374(v=vs.110) * Automatic generalization: http://msdn.microsoft.com/en-us/library/dd233183(v=vs.110).aspx * Type providers (type-safe data access): http://msdn.microsoft.com/en-us/library/hh156509(v=vs.110).aspx

There are probably lots of other features that I have forgotten. I don't think calling F# unoriginal is fair...

--
Alex Rønne Petersen
a...@lycus.org
http://lycus.org

Reply via email to