An Interview With F# Creator Don Syme 267
OCatenac passes along an interview with Don Syme, chief designer of F#, which is Microsoft Research's offering for functional programming on the .Net platform. Like Scala, which we discussed last fall, F# aims at being an optimal blend of functional and object-oriented languages. "[Q] What is the best program you've seen written in F#? [A] I've mentioned the samples from F# for Scientists, which are very compelling... For commercial impact then the uses of F# in the finance industry have been very convincing, but probably nothing beats the uses of F# to implement statistical machine learning algorithms as part of the Bing advertisement delivery machinery. ... We've recently really focused on ensuring that programming in F# is simple and intuitive. For example, I greatly enjoyed working with a high-school student who learned F#. After a few days she was accurately modifying a solar system simulator, despite the fact she'd never programmed before. You really learn a lot by watching a student at that stage."
There going to run out of musical notes soon... (Score:4, Funny)
Re:There going to run out of musical notes soon... (Score:5, Funny)
In music theory, F# is as far as you can get from C.
Re: (Score:2)
It's funny 'cause it's true.
Re: (Score:2)
I know someone is going to play smart-rear-end and create B# or something
Re: (Score:2)
Someone like Kernighan & Ritchie?
Re: (Score:2)
EVIL!!!!
Re:There going to run out of musical notes soon... (Score:4, Informative)
Anyone else think is was a .NET Fortran? (Score:2)
Obvious retort is why?
Re: (Score:2, Interesting)
According to wikipedia (yeah, I know, I know), FORTRAN is "a general-purpose, procedural, imperative programming language that is especially suited to numeric computation and scientific computing. [wikipedia.org]".
F#, on the other hand, is a "multi-paradigm programming language [...] that encompasses functional programming as well as imperative object-oriented programming disciplines. [wikipedia.org]"
In summary, FORTRAN is for Formula Translation, I guess? F# is Functional, but with language support for OO or C-style programming.
I admit
Re:Anyone else think is was a .NET Fortran? (Score:4, Interesting)
So now
Programming tools have definitely advanced. The days of punched cards and line editors like EDLIN are far gone for most programming needs. It's nice that modern languages don't let you overflow arrays anymore or have to deal with pointers.
The biggest advances in programming??? Compilers, recursion, and object oriented syntax. I've seen far too many 'the next big thing' to get excited over something like this. Remember when C# was supposed to be the next big thing???
But I'm still using the same if/then/else and loop logic that I did 30 years ago. No matter how much things change, they still stay the same....
Re: (Score:3, Insightful)
Re: (Score:2)
If you had an Access database, classic VB was a great way to talk to it, far superior than the Access UI design tools themselves (anyone who proposes designing a database UI in Access should have their head examined)
Re: (Score:2)
Yeah, but even Access has it's place.
I had a simple tool that needed writing a few years ago, a engine that generated checks from mail-in rebates. It was a simple import process from a CSV and a daily print-job from our logistics room. That project was thrown together on a weekend and is still in use today, no problem no drama.
I could of written something in Java and put it on the web, and done PDF outputs, etc etc. but why? Access was a nice little tool that did EXACTLY what the problem required. A VB
Re:Anyone else think is was a .NET Fortran? (Score:5, Informative)
To say a language is "functional" does not mean the same thing as the common usage of the word, which is to say "useful" or "utilitarian", though in my experience with Ocaml, Haskell, and Erlang, they are that as well if you take the time to learn to use them well. Fortran and F# have just about nothing in common.
The name "functional" is a little confusing, since imperative languages are heavily based on functions as well, though they are not typically used in the same way. For instance, in a functional language it is usually much easier to write functions that compute useful things without causing side effects, such as modification of shared state. They also usually support such features as tail call optimization (which causes certain forms of recursion to require constant rather than linear stack space), closures, the ability to declare functions within other functions, and the ability to call a function with less than its expected number of arguments, yielding a function of the remaining arguments.
Another common trait of functional languages is the absence of looping constructs, in favor of recursion and library functions like map and fold.
Re: (Score:2)
The functional programming languages (Haskell, F#, ...) are referring to functions in a mathematical sense.
When programmers talk about functions (in Pascal, C, C++, ...) they are referring to procedural programming languages.
In C++, the Standard Template Library (STL) is using a lot of functional programming techniques and style, albeit in a language that does not directly support functional programming.
It is, kind of (Score:3, Interesting)
FORTRAN has dug itself into a corner where it survives quite nicely. It's used for mathematical, engineering and scientific libraries. FORTRAN just seems to lend itself to expressing these sorts of problems better. Mind you, the whole program probably won't be written in FORTRAN - any UI code and other glue will be written in C. F# is filling the same niche for .NET - the mathematical and analytic libraries are being written in F# while C# is used for UIs and other glue. So even if it's a completely d
Re:Anyone else think is was a .NET Fortran? (Score:4, Informative)
Being an old fuddy-duddy, my first thought that Microsoft was doing a dot NET version of Fortran, but...
Obvious retort is why?
I've no idea why you'd want one, but it exists [lahey.com], nonetheless - made by Fujitsu of all things.
Re:Anyone else think is was a .NET Fortran? (Score:5, Informative)
Oh, by the way, Fujitsu must really be into BDSM or something - they also offer COBOL for .NET [netcobol.com].
Re: (Score:2)
1) Migrate existing COBOL code to
2) Start migrating modules one by one to C# or ASP.NET or what ever makes sense (even keeping some in COBOL)
3) Start saving money on maintenance and being more future proof
It's still a hell of a migration project but significantly better than reimplementing from scratch or having that same system running in 10 years..
Re: (Score:2)
In reality it's just a .net version of Ocaml. Not that that's bad, mind you, but it's hardly revolutionary, or even innovative.
I will give them props for doing it though; I'm surprised Microsoft would bankroll anything related to functional programming for at least 8 years from now.
F is for Fun? (Score:5, Funny)
Sure, when everything works out. Something tells me F will mean something completely different when youre getting compiler errors or crashes.
What might f otherwise be for? (Score:2)
Something tells me F will mean something completely different when youre getting compiler errors or crashes.
fgrep??
Re:F is for Fun? (Score:5, Funny)
F# is an abbreviation -- the language's full name is F#$@!
Re: (Score:2)
Functioal?
Checkbox marketing (Score:4, Insightful)
and the emotive language and buzzwords
*yawn* unconvinced.
Re: (Score:2, Interesting)
The impression given to the layman is that Microsoft technologies continue to enable idiocy. Hell, the code I dealt with at Java on Oracle shops was slow as fuck but at least it worked the first time around.
Re: (Score:3, Insightful)
Somebody wrote a bad program in C# that crashed and somebody else wrote a better program at another company on Java and it didn't crash. What more evidence does one need that .Net is crap?
Re: (Score:3, Funny)
Anecdotes [computerworld.com] aren't evidence, but their weight increases with decreasing distance. If your anecdote were about camel traders in some Central Asia mountains I would never give it a second thought.
Computer programming, OTOH, is closer to home, it's not just *one* bad program in C# that crashes, it's everyone who works with computers that has come across one badly written .NET system after another.
There must be something wrong about the whole .NET architecture, m
Re: (Score:2)
When crashes are a criterion then C must be the worst language ever existed.
Re: (Score:2)
crashes in C are deliberate - its the trials and hardships of learning from your mistakes that hardens you into being the best programmer young grashopper.
or you can learn Java or vb.net as your first language, like a girl. :)
Re: (Score:3, Insightful)
I've learned Turbo Pascal as my first language back then in 1991. Currently I develop in C for embedded Linux, but I still like Pascal better because I happen to like comfort better than hardships.
Re: (Score:2)
Pascal counts as one of those "hard" languages you know - its not 'everything done for you, with garbage collection, a huge class library, and objects that provide your functionality'. Try vb.net sometime, and you'll see what I mean - its more like a toy language than anything, but if you're writing the same old LOB apps that just grab data and display it with a bit of formatting, then its perfectly good enough, just not what I'd call satisfying.
Knee-jerk moderation? (Score:3, Insightful)
As one might expect, you can get moderated as Flamebait if you say the same thing about opensource as somebody said about .Net.
The funny thing is that the moderator missed the point. The AC was mocking the logic of the other poster, not really making a statement about OSS projects.
Re:Checkbox marketing (Score:4, Informative)
If you don't want the marketing drivel, then the short story is that F# is ML [wikipedia.org] for .NET. If you know what that is, you should already know what it's good for, and when you'd want to use it. If you don't know what it is, then you might want to start from the basics [wikipedia.org].
Marketing? What the? (Score:3, Informative)
Re: (Score:2)
Thanks for the mental image of a squatting Steve Ballmer...
*splorsh* [Steve gnaws umbilical cord]
Re: (Score:2)
Yes, but does it shift paradigms outside the box?
Re: (Score:2)
Yes, and with synergy. But only when well timeboxed.
Re:Checkbox marketing (Score:4, Interesting)
being Microsoft it will probably not run on 95% of our compute clusters
F# specifically supports Mono on Linux and OS X. I somehow doubt it's good enough for clusters, though...
In any case, I don't think that's the intended use case. It's not for computationally intensive stuff - you'd still want Fortran or C/C++ there, as you've rightly noted - but for the kind of computations that you do on your own box. These guys [ffconsultancy.com] provide some supplement tools.
That said, it can still be used to massively parallelized, scalable tasks, since it has some stock parallelization primitives, and can also use .NET Parallel Framework (which is task/taskgroup-based automatic scheduler on lower level, and automatic parallelization of queries and transforms over sequences on higher level).
Therefore... Why should I care? What does F# do, for me as a scientist, that I should invest my time into it?
Do you, as a scientist, use Haskell or ML? If so, you can think of F# as the same kind of thing, but with first-class IDE and debugging support, and ability to quickly throw together UI frontends in WPF (it's pretty good for rather advanced visualization).
Re: (Score:2)
And Accelerator [microsoft.com], a MS Research project, can be used inline with F# to run code on a GPU.
Re: (Score:3, Informative)
Aha! Right there is the problem. The first-class IDE is Windows-only.
I do use Haskell. TextEdit and emacs work well enough. May I suggest that a good REPL, strong type system, and pure functional style mean that debugging is a different process than watching memory locations change value for imperative languages. I've checked out OCaml, but its notation - call me shallow - meant I went back to lisp and shortly after embraced Haskell
Re:Checkbox marketing (Score:4, Interesting)
So F# is for scientists and the finance industry, yet it cannot run on most mainframes (GNU/Linux or Unix), but there is mono that can, but does not work for computationally intensive applications.
That means that it will not be able to be used for Quantum Mechanical calculations or General Relativity calculations or any other calculation that scientists would like to perform. Nor would it scale to the large amount of real-time transactions that a bank or stock trading company would need to perform.
So how is F# better than Fortran & C/C++?
.NET Framework (Score:5, Interesting)
Last year I wanted to know what all the hoopla was about functional programming. I checked out Haskell, Scala, OCaML and F#. Coming from a Java/Delphi/C# background myself I had to go through it a couple of times before I "got" it. I'm glad I did because I banged out my first production IronPython lambda function on last Friday (yay!).
I know that MS bashing is popular here on Slashdot, but I really want to take a moment to say that the .NET Framework really is excellent. The ability to mix and match different paradigms and languages in a clean an concise manner which is a joy to program in.
Yeah I know patents bla bla mono bla bla Novell bla bla Miguel bla bla.
Why not Groovy? (Score:3)
If you also know Java well, Groovy [codehaus.org] can also be an excellent tool, and is also useful in production environments.
Re: (Score:3, Informative)
Groovy is not a particularly apt comparison, since it's more like a cross of Java and Ruby - particularly the fact that it's dynamically typed. On .NET, Boo [wikipedia.org] plays a similar role.
The closest thing corresponding to F#/.NET on Java platform is Scala. It's actually a better language in terms of features, albeit with a slightly different balance - Scala tends to be more concise when dealing with OOP, and more verbose with FP, while F# is the other way around. However, a major difference is that F# has first-clas
Re: (Score:3, Informative)
I would say of all the functional languages I looked into Scala was the nicest, followed closely by F#.
That is purely because it was easier to get up and running with Scala on Linux & Eclipse.
I like to learn new languages using an IDE. When I've learned it well I start hacking away in a text editor.
My primary IDE for IronPython on my Windows machine at work is vim ;-)
Re:.NET Framework (Score:4, Informative)
http://channel9.msdn.com/shows/Going+Deep/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1/
there are also a ton of other videos about f# on channel9 like:
http://channel9.msdn.com/posts/martinesmann/Don-Syme-FSharp-and-functional-programming-in-NET/
http://channel9.msdn.com/shows/Going+Deep/C9-Lectures-Dr-Don-Syme-Introduction-to-F-1-of-3/
or others specifically on asynchronicity and parallelism in f#....
Re:.NET Framework (Score:5, Funny)
I hope chapter 1 contains directives on when and when not to use fixed width fonts.
Re: (Score:2)
Re: (Score:2)
I really want to take a moment to say that the .NET Framework really is excellent. The ability to mix and match different paradigms and languages in a clean an concise manner which is a joy to program in.
Yeah I know patents bla bla mono bla bla Novell bla bla Miguel bla bla.
I agree wholeheartedly. Even though I haven't played with IronPython yet, just C# but for me that's enough (even though it has its gotchas)
Re: (Score:2)
That's great and all but .NET is a library, not a language. It sounds like the fact that you enjoyed IronPython after coming from a C# background really has nothing to do with Python as much as it does the fact that you already knew the .NET library.
If you don't know .NET? Well, thats another library to learn, and is no better or worse than anything else.
Re: (Score:2)
I was looking for a good solution for automated tasks. The idea is to run tasks on a fixed shedule (like database maintenance, inbox reading and processing, etc...). Where we worked we tried all kinds of solutions (Windows service applications, COM objects, etc...) but nothing really worked.
When I noticed that in the UNIX world there was something called CRON and it ran something called BASH scripts I basically drew an analogy. What would be a Windows version of CRON and BASH?
IronPython and the Windows Task
Re: (Score:3, Interesting)
If you like ironpython, check out Boo (http://boo.codehaus.org/) statically typed (or dynamic if you like) language which has borrowed most of the best features from from python.
The optimal blend... (Score:3, Interesting)
Re: (Score:2)
*head explodes*
Re:The optimal blend... (Score:4, Interesting)
Functional-based programming languages are syntactically inferior to OO ones
Most likely just the ones that you've seen, and for the tasks you've thrown at them. I wouldn't write a line-of-business application in F#, sure, but I wouldn't write a parser in C# either.
While we're at syntax - I've yet to see any non-hybrid OO language which has anything matching the power and beauty of classic FP pattern-patching. For any sort of tree processing especially, it's a god send - whereas in OO you have to deal with ugly visitor pattern hack.
Then also, FP doesn't have to mean "alien syntax", either. Have you seen Scala? It has everything any self-respecting FP language needs to have, yet it's still very much OO-centric, and the syntax is broadly Javaesque.
To conclude... one of the first two OO languages, and the one to which pretty much all OO languages today owe at least half of their design, is Smalltalk. Coincidentally, it's also a very potent FP language - blocks are nothing but first-class functions, and they were used so pervasively in the language and the standard library that even the most basic conditional statement was actually a method call with two blocks...
And yet, Smalltalk is considered as one of the most pure OO languages ever.
Which is to say that OO and FP is really orthogonal, and not at all contradictive. You can have both, and either one is good for something different - so there's no reason not to have both, and get the best of both worlds.
Re: (Score:3, Interesting)
Okay everytime this kind of article comes up on slashdot people point to five or six other languages I have never heard of. Now smalltalk is an old language and I have heard of it and you make some good points about what it can do. So why do we have so many unique languages? Is it because people want to start from a clean slate? Surely working on virtual machines and calling standards is just as important.
Re: (Score:3, Insightful)
So why do we have so many unique languages?
It's because we don't have a clear idea on which language features are good, and which aren't. If you ask someone (say, me ~), you'll probably get a straightforward reply, but if you ask another guy, he is quite likely to strongly disagree on many major points.
There are many arguments both for and against dynamic typing, for example. There are similarly many arguments for and against OOP. There are advantages of having code pre-compiled to native, and there are also advantages of having a VM with a JIT comp
Re: (Score:2)
Funny. I'm just sort of getting into OO-based programming in Python, and it DOES drive me insane, compared to the functional perspective of Mathematica. I find functional languages to be much easier to read, faster to write, and just how I think.
I AM happy with Python, and I'm trying to transition to it as my workhorse language.
Syntax parser. (Score:2, Funny)
Re: (Score:3, Funny)
No, it's called Visual Studio [msdn.com], actually.
Hmmm.....
FParsec (Score:4, Insightful)
There's one particular reason to look at F#, and that's FParsec [quanttec.com]. Parser combinators are just awesome, and don't get me wrong - I like the original Parsec, and Haskell in general! - but its IDE support is minimal, and debugging it is a pain.
With F#, you get the same awesome tool, but in an environment where you can actually use it for day-to-day jobs - write any parsing code as an F# library using FParsec, and call it from the main body of C#/VB/IronPython code.
Re: (Score:2)
Look at Boost.Spirit, it's much cooler.
Looks interesting as replacement for Python (Score:3, Interesting)
I'm going to say something anathema to the /. crowd, but I'm looking into it with interest for replacing Python. I first teethed on FORTRAN, moved to Matlab 10 years lates, and have been using C extensively for the past 2 years. I'm starting into Python as a quick and dirty replacement for Matlab, and am quickly falling into a love-hate relationship with it.
The love comes from all the cool things that Python can do, for free. Dynamic typing, .append() functionality, etc. It's just awesome.
The hate comes from the sheer lunacy that is Python syntax. Forced whitespacing doesn't suit my debugging style (why not just have the compiler recognize either whitespace or accolades?); functions names like len() are just, frankly, idiotic (length() is much more readable to beginners, and takes only a few extra milliseconds to type for experienced users); and the way of working with indices is just weird (2:5 means the 2nd, 3rd, and 4th elements, but not the fifth; range(2 5) gives you 2 3 4, but not 5.).
Python reminds me of many of these incredibly powerful scientific projects that never got used by a non-scientist until it was far too late to make changes. range() is a good example of this, as while it perfectly emulates "for i=2; i < 5; i++", it is NOT what you expect to get when you say, outloud, "I want a range of numbers from 2 to 5". Having contributed to Scilab, I should know as I'm equally guilty of this kind of thing.
If F# can fill this void, by giving functional programming with functional syntax, I'll probably stop my Python experiments and move directly to F#.
Although to be honest, I'd love to find a python front end that uses non-insane syntax and then simply precompiles it into python syntax at run-time. Then you don't have the MS, Windows, and .Net ickiness.
P.S. I'm not looking to start a flame war about force whitespacing. There are really good reasons to like it. All my programs have consistent whitespacing, except when I debug (I like to put debug programming all the way against the margin, that way there's no possibility of ever forgetting it in the code)). However, you can't have it both ways on readability vis-à-vis function names and indices.
Re: (Score:3, Interesting)
The love comes from all the cool things that Python can do, for free. Dynamic typing, .append() functionality, etc. It's just awesome.
You do realize there's no dynamic typing in F#, right? It's very rigidly typed, in fact, more so than C/C#/Java - it won't let you use an int where a float is expected! (it's the price you have to pay for type inference - it doesn't play well with ambiguity)
The hate comes from the sheer lunacy that is Python syntax. Forced whitespacing doesn't suit my debugging style
F# is indentation-driven by default, much like Python (actually, more like Haskell, with more subtle rules). You can turn that off, technically, and use explicit semicolons - but that is considered legacy mode, and the community at large shuns it.
functions names like len() are just, frankly, idiotic (length() is much more readable to beginners, and takes only a few extra milliseconds to type for experienced users)
FP lang
Re: (Score:2)
Re:Looks interesting as replacement for Python (Score:5, Interesting)
let rec factorial n =
match n with
| 0I -> 1I
| _ -> n * factorial (n - 1I)
What do those funny characters mean? What's the I after the numbers? Compare to the python one liner:
def factorial(n): return 1 if n == 0 else n * factorial (n-1)
That makes sense even to someone with absolutely zero experience in the language.
Re: (Score:2, Interesting)
Your example includes some distractions like bigint literals (0I and 1I), and uses pattern matching, which doesn't exist in Python.
You have to learn the language to be effective, the wikipedia article was showing the F#-onic way of writing it - it's perfectly possible to rewrite this in a more imperative form as:
let rec factorial n = if n=0I then 1I else n*factorial (n-1I)
but pattern matching is a key part of the language. The compiler can detect whether all possible pattern states have been caught, which i
Re: (Score:2)
I've never used F# but that syntax is very clear as long as you understand pattern matching. Furthermore, the F# version won't cause a stack overflow for large values of n where the Python version will.
Who cares? Either programs are toys which are not really useful for big values. There are other more efficient ways to compute n! for big n's, but not something that will fit in a handful of code lines.
Re:Python is waaaayyy better (Score:2)
I've never had a problem with python's whitespace parsing, but I read somewhere that python is so superior it has support for all the other schemes to denote blocks. For example, you can use 'begin' and 'end' keywords, you can also use braces {,} as well. Here's an example demonstrating python's superior syntax:
if foo == 3:
....block of code here....
....another block of code here....
#begin
#end
else:
#{
#}
You say you don't like 'len' as a name for a length function, that you would prefer using the name 'length'. Well, python is so superior, that you can fix that problem really fast in your code:
length = len
From
Re: (Score:2)
bash# irb
>> (2..5).each { |number| puts number }
2
3
4
5
>>
>> (2..5).to_a
[ 2, 3, 4, 5 ]
>>
>> (2...5).to_a
[ 2, 3, 4 ]
>>
>> [ "apple", "orange", "banana", "peach" ].each do |fruit|
puts "Yummy, #{fruit.pluralize}!"
end
Yummy, apples!
Yummy, oranges!
Yummy, bananas!
Yummy, peaches!
>>
Two great tastes that taste good together? (Score:2)
nothing beats the uses of F# to implement statistical machine learning algorithms as part of the Bing advertisement delivery machinery
Are you SURE you want to promote that as a productive use of the language? Bring together two things that people love to hate? Even Google's ads are merely tolerated at best.
What's next, "F# for spammers"?
It's not Microsoft RESEARCH's offering... (Score:3, Interesting)
...of a functional language, it is simply Microsoft's offering of a functional language. The former statement sounds like it's one of the dozens of functional languages fostered in academia, for academia to play with. The whole difference here is that, as of Visual Studio 2010, F# becomes a fully productized and supported language in the .NET world. That's really what's exciting for functional language geeks, because never before a real, modern functional language of the generation built in academia in the 90s, like OCaml and Haskell, had such a mainstream backing.
Re: (Score:3, Insightful)
There is a basic rule about writing programs - choose not a vendor specific language, and the useful lifetime of your program will surpass the life of your hardware.
F# is really just an OCaml variant anyway. Why should I buy something that is locked into a particular vendor and OS when I can get the same thing for free and run it on all the systems I own?
This article smacks of marketing to developers too much for me to feel comfortable with it... ok for Microsoft tards but not for people who haven't sold th
Re: (Score:2)
"Actually, OP probably means common sense. You should look into it. Or maybe you're one of those freetards that constantly expect people to give them free shit."
You must be one of those retards that think only capitalism works - and then buys into a vendor that does anything to disallow competition.
Time to change (Score:3, Funny)
What About Functional C#? (Score:2)
Aren't all the functional techniques in F# being pulled into C#? Like DryadLINQ, and other components from Microsoft?
Functional languages and recursion (Score:2)
If this is a functional language, it presumably makes generous use of recursion. Which brings up something I'd be interest in /. comments on...
There are a lot of algorithms that can best be expressed and (theoretically) most efficiently solved by recursion. However, (a) most programmers are not comfortable with recursion and (b) most programming languages (C++, C#, Java, etc.) make no optimization for recursion. In particular, they use a new stack frame for each recursion, even if the function is tail-rec
Re: (Score:2, Funny)
Why are most programmers uncomfortable with it?
Possible because:
n1=1
n2=2
n3=6
n4=24
n5= "Segmentation fault. Core dump"
What can be done to break this cycle?
Try this:
#define "Segmentation fault. Core dump" 120
Re: (Score:3, Interesting)
A child "modifying a program" isn't very spectacular. Any moron with no experience can modify "hello world" to spit out "goodbye world". I'm quite certain that "modifying a solar system simulation" went something along the lines of this:
Problem 1:
Part A) Replace the values in the program with the proper values for the orbit of the planets.
int orbit_of
Re: (Score:3, Insightful)
He was probably modded as troll because, while he may be entirely correct about "marketing droids", the conclusion that "F# stinks" doesn't exactly follow from that - unless he has some specific horror stories to share. Or at least saw the language, and is qualified to judge on its merits (i.e. familiar with similar existing languages).
Re:never programmed before??? (Score:5, Informative)
He was probably modded as troll because, while he may be entirely correct about "marketing droids", the conclusion that "F# stinks" doesn't exactly follow from that - unless he has some specific horror stories to share. Or at least saw the language, and is qualified to judge on its merits (i.e. familiar with similar existing languages).
Looking at the wikipedia articles, I tend to think he has a point. Look at the F# version [wikipedia.org] of the famous factorial program and compare to the Haskell [wikipedia.org] version(s). I think anyone would be hard-pressed to prefer the F# version, but who knows?
Re:never programmed before??? (Score:4, Insightful)
F# version is essentially the same as OCaml version. In practice, you will notice that there are a lot of people who prefer OCaml to Haskell even today, and that has to do with quality of implementation. Haskell is a nice language on the paper, but its laziness makes it both hard to implement fast, and insanely hard to debug.
With F#, you get language on par with OCaml (so less high-level and expressive than Haskell). But you also get the ability to directly call any existing .NET library - no wrappers or FFI declarations needed. Furthermore, you get an IDE with syntax highlighting, code completion, error checking as you type, and debugging.
Also, keep in mind that most people who get acquainted with F# today aren't familiar with Haskell. In fact, most of them don't even know it exists. They are C++, C# and VB users, who suddenly discover a new project type in VS2010, and are curious as to what this is all about. For them, the basis of comparison will be a typical imperative OO language, not Haskell - and most marketing materials are written with that in mind. It is generally assumed that people who know Haskell can judge these kind of things on their own :)
Re:never programmed before??? (Score:4, Informative)
F# version is essentially the same as OCaml version.
I don't know OCaml (I have a cursory knowledge of Haskell, which is why I picked that for comparison), but I could read the OCaml version no problem. The Scala version was difficult, but after staring at it for a bit I understands what it's getting at (especially the _ syntax is unnecessary obtuse). I still think F# is the worst of the lot. Big disclaimer: I have only looked at the factorial example. So this is sort of criticism based on "Hello World" snippets. I'm just saying that the poster far above might actually know what he is talking about,.
Re: (Score:2)
Well, I may be stupid, but still. No, the match I understood as a funny way to write case statements. The -> is clear as well, but the 0l? I supposed l is for long, but I guess it meant "arbitrary precision integers" And the _? What's the deal with that? I also cannot guess what "rec" standard for. Compare this to the Haskell example:
Here, I see plain English (Integer) and only two magic symbol (::, ->), the latter o
Re: (Score:2)
Okay, I can see your point. The "rec" is definitely confusing and it's one of the things I would remove from the language. It's short for recursive and is required if your definition of the function is going to make a call to the function. I've never understood why that would be required.
I really think that "let" is pretty straightforward. If you've never heard a teacher or professor say "let f equal ..." then I'm not sure where you've gotten your mathematics background.
The "match" and "with" parts seem
Re: (Score:3, Interesting)
One can write a Haskell version of factorial that looks pretty much the same as the F# version:
This contains similar pattern matching expression, even using the same match-anything-pattern-keyword '_' and some additional polymorphism syntax in the type signature. The type signature could be left out and what's shown is what the compiler would then automatically derive.
Re: (Score:2)
vim has syntax highlighting for every programming language and file format known to man (well... nearly). Emacs, gedit, kate and others support a lot of different languages as well. However, Visual Studio only supports syntax highlighting for languages it can compile.
I hate code completion. If you mis-type something, the editor will fill out the wrong thing for you. For editing XML, you can't wrap some text in a tag, as Visual Studio auto-completes the end tag for you. I always type both quotes after an att
Re: (Score:2)
Python is good for many kinds of high-level code, but not all. Try processing a deep nested tree structure in it, for example (say, AST). Or writing a recursive descent parser.
Yes, you can do it, but it feels just as awkward as OOP done in plain C, after you see how it can be done in twice as little code with pattern matching in any FP language.
There's nothing wrong with either Python or C, of course. They have their own niches where they are near-perfect. In fact, the whole point of .NET is to let you take
Re: (Score:2)
Note there is nothing inherently functional about pattern matching.
It's just a feature that happens to be popular in the ML/Haskell world.
The equivalent with OO is a visitor. It tends to be more verbose due to lack of functional glue. But with anonymous classes or functions, it's not much more verbose anymore (and at least the parsing is clear to a human).
reliability (Score:2)
Re: (Score:2)
As the "father" of F#, Don Syme had consulted pretty much all books written on the language so far, as well as those still being written. There's simply no better authority.
Re:Not even going to RTFA (Score:4, Informative)
Totally marketing garbage. Man is probably a great guy, with a lousy job. But F#, really? even .NET is ripping off Java.
I'm not sure I follow. Are you saying that F# is somehow "ripping off" Java? If you mean it's a "rip off" something else, then, well, it's clearly designated as an OCaml derivative, it's not exactly news... but we wouldn't get far if people wouldn't "rip off" the work of others, and build on that. You know, just like Java ripped off C++ and Smalltalk, and JavaScript ripped off Self, and Smalltalk ripped off Lisp, etc...
If you mean .NET as a whole being a rip-off of Java, then you're late by like 6 years or so - C# 1.0 was for the most part "a better Java" (note the "better" part, however), but since then it has evolved much faster, and Java is struggling to keep pace, "ripping off" C# as it goes. To give a specific example: C# had first-class functions (called anonymous delegates in the language) in version 2.0, released in 2005. Java still doesn't have them, and they will only likely come in Java 7, to be released by the end of this year. To give another example, C# 2.0 and above has generics that Java language designers would call "reified". Java doesn't, and there's no telling when, or even if, it will.
Microsoft talks about building "ecosystems" but the way they do it, everything in the ecosystem has to have a M$ logo on it. Why can't they just inter-operate and integrate with outside software?
Uhh, I don't even know where to begin here.
Here [ecma-international.org] is the C# language specification, if you ever want to write your own C#compiler. Here [ecma-international.org] is the CLI spec - this covers VM semantics, all involved file formats, and the fundamental class library - this is useful for a .NET compiler for any language.
And third-party languages for .NET do exist in large quantities. One good example is Delphi Prism [embarcadero.com], which provides full Visual Studio experience, not any worse than what is there for C# out of the box. Then there's Eiffel, Smalltalk, Perl, Fortran, COBOL... IronPython and IronRuby were also outside projects, by the way - their authors got hired by MS along the way because the company was interested in developing dynamic languages on the platform, and, naturally, picked the two most popular ones.
Libraries are also part of the "ecosystem", by definition and there are tons of third-party ones. I won't even bother giving links as there are too many - google it if you want.
So, can you explain what you mean by "inter-operate and integrate with outside software" with respect to .NET, if the above is not good enough?
Re: (Score:2)
> C# 2.0 and above has generics that Java language designers would call "reified"
Is this the same issue as Java generics doing type-erasure?
Re: (Score:2)
Yes. Basically Java went the backwards compatible approach and C# went the "correct" approach.
Seeing how Java is a much more mature and widely used language, the decision made a lot of sense. Companies that were using old Java stuff wouldn't be very thrilled to learn that they couldn't use generics or any libraries that used generics.
.NET on the other hand was still rather young. They could afford to ditch backwards compatibility for long term gains.
Re: (Score:2)
So, can you explain what you mean by "inter-operate and integrate with outside software" with respect to .NET, if the above is not good enough?
He means, can it interoperate with stuff on a non-MS platform. See, IronPython may be an example of how flexible and interoperable it is - "gee, you can write .net in Python", but really, its still .net, not an "outsider" to the MS ecosystem.
IIRC the C# spec submitted to ECMA was for version 1.1, so missing all the cool stuff everyone takes for granted now - like the
Re: (Score:2)
"If you mean .NET as a whole being a rip-off of Java, then you're late by like 6 years or so - C# 1.0 was for the most part "a better Java" (note the "better" part, however), but since then it has evolved much faster, and Java is struggling to keep pace, "ripping off" C# as it goes. To give a specific example: C# had first-class functions (called anonymous delegates in the language) in version 2.0, released in 2005. Java still doesn't have them, and they will only likely come in Java 7, to be released by th
Re: (Score:2)
even .NET is ripping off Java
Thats like saying Linux just ripped of Minix/Unix. All your comment shows is that you have little to no clue of what .NET is. The primary way to do innovation is to take existing technologies and build upon it and improve it. Which is why software patents suck ass.
Why can't they just inter-operate and integrate with outside software?
They can. They however don't want to (or need to), because then they lose control over it.
Re: (Score:3, Interesting)
Well, C++ templates are unique. I don't know any other language that has a macro facility that pretends to be a generic type system... ~
Anyway, C++ was not original from language design perspective - it does indeed rip off Simula a lot - but who actually wrote anything in Simula? It was a very niche language, while C++ became mainstream. Most people who used it first saw all those Simula features in C++, and don't really know better. So "according to many developers", the assertion may even be correct...
It'
Re: (Score:2)
I've tried a bit of win32 (not