In particular, Scala, F#, Erlang, Haskell, and Mathematica are discussed in some detail, and OCaML is mentioned in passing.
Unfortunately, the article does not mention some of the more significant programming languages (e.g., Scheme is not mentioned at all), tends to overgeneralize (e.g., it describes Haskell as "a foundation for research" without citing the recent "Real World Haskell" publication), and is inconsistent in some places (e.g., it describes Erlang as "a general-purpose language," but then, in the very same sentence, proceeds to describe it as being "specifically designed ... for building highly parallel, distributed, fault-tolerant systems").
Further, the article commits a number of significant factual errors. In particular, on the first page, the articles states that,
>"In any functional programming language, you are likely to encounter these features:
>... > * Heavy use of pattern matching, although technically it is not a defining feature of FP. > * Lazy evaluation, which makes possible the creation of infinite sequences and other data structures."
Pattern matching is not a standard feature of a number of major functional programming languages, including Scheme and LISP.
Lazy evaluation, at least by default, is not a standard feature in many major functional programming languages, including Scheme and LISP. The major languages that use lazy evaluation by default are Haskell and Clean.
Any comments on the article?
-- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^
Always good to see any kind of relevant coverage in the more mainstream programming press.
I also take issue with quite a lot of what they say but, interestingly, not the same parts that you have taken issue with. However, this is a free article by a non-expert so you can hardly expect it to be accurate. Indeed, I expect we'll see a lot more of this kind of writing as FP gains more traction.
. Javascript and C# 3.0 are the world's most popular functional languages and this article about functional programming fails to mention either of them. Indeed, everything in the article is tainted with Haskell and does not even concur with the interpretations of the vast majority of functional programmers or languages.
. They say that FP is hard when, in fact, most people find it much easier to learn than OOP.
. They discuss several problems that are specific to Haskell and do not afflict most functional languages.
. They pretend that purely functional programming magically solves parallelism but you still have to decide when to spawn parallel computations (even in a pure language) and you need a language implementation that supports scalable parallelism (i.e. at least a "mostly concurrent" GC). They also neglect the fact that purely functional programming is slow, which completely undermines the point of parallelism anyway.
. Haskell is a camel?!
> In particular, Scala, F#, Erlang, Haskell, and Mathematica are > discussed in some detail, and OCaML is mentioned in passing.
The "ml" in "OCaml" does not stand for "ML" so it is just "OCaml" and not "OCaML", BTW.
> Unfortunately, the article does not mention some of the more > significant programming languages (e.g., Scheme is not mentioned at > all),
Scheme is arguably not a significant programming language: it only has 12% market share of functional programming languages (excluding Javascript and C# 3.0) according to the Debian and Ubuntu package popularity contest.
> tends to overgeneralize (e.g., it describes Haskell as "a > foundation for research" without citing the recent "Real World > Haskell" publication),
I suspect Real World Haskell did not hit the bookshelves until after that article was written so I can forgive them for that. I would much rather see references to industrial uses of functional languages rather than books about how languages might be used in the real world.
> and is inconsistent in some places (e.g., it > describes Erlang as "a general-purpose language," but then, in the > very same sentence, proceeds to describe it as being "specifically > designed ... for building highly parallel, distributed, fault-tolerant > systems").
Fair enough. ML is a general purpose language that was specifically designed for meta programming.
> Further, the article commits a number of significant factual errors. > In particular, on the first page, the articles states that,
>>"In any functional programming language, you are likely to encounter these >>features:
>>... >> * Heavy use of pattern matching, although technically it is not a >> defining feature of FP. * Lazy evaluation, which makes possible the >> creation of infinite sequences and other data structures."
> Pattern matching is not a standard feature of a number of major > functional programming languages, including Scheme and LISP.
IMHO, Lisp and Scheme are no longer major FPLs. They were obviously referring to OCaml, Haskell, F# and Scala, all of which are far more widely used than Lisp and Scheme. If you want to counter that, I would recommend saying that Javascript and C# 3.0 do not provide pattern matching (but the authors were apparently unaware of their functional-ness anyway).
Also, Scheme does actually bundle pattern matching now (IIRC).
> Lazy evaluation, at least by default, is not a standard feature in > many major functional programming languages, including Scheme and > LISP. The major languages that use lazy evaluation by default are > Haskell and Clean.
They did not say "by default" and almost all of these languages bundle some support for laziness. OCaml and F# even bundle custom syntax for this purpose. OCaml 3.11 just added lazy patterns as a language feature. Learning to leverage laziness is important in all of these languages, IMHO.
I think this article is fine. I am much more concerned by the complete lack of useful innovation outside F#. Why are the open source functional languages and their implementations so out of date and why are other companies not moving to replicate F#'s success elsewhere?
>. Javascript and C# 3.0 are the world's most popular functional languages >and this article about functional programming fails to mention either of >them. Indeed, everything in the article is tainted with Haskell and does >not even concur with the interpretations of the vast majority of functional >programmers or languages.
JavaScript and C# 3.0 are multi-paradigm languages, so in order to describe them as "the world's most popular functional languages," they need to be used by the majority of users according to that paradigm.
C# 3.0 ("C# Orcas") (see "C# Version 3.0 Specification" at http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx) introduced several language extensions building on C# 2.0, including lambda expressions and expression trees, supporting the functional paradigm; however, for a language to have a new paradigm adopted by the majority of its users takes time. C# 3.0 was released about three years ago, in October 2005; can you show that the majority of C# programmers have switched from object-oriented to functional programming?
>. They say that FP is hard when, in fact, most people find it much easier to >learn than OOP.
Most students will have a much easier time in learning a new paradigm if they haven't already learned a different paradigm. If the students haven't already learned OOP, then I would agree; however, un-learning OOP can be difficult for programmers who have already been programming according to that paradigm.
>The "ml" in "OCaml" does not stand for "ML" so it is just "OCaml" and >not "OCaML", BTW.
Noted. "ML" stands for "metalanguage"; CAML originally stood for "Categorical Abstract Machine Language (although OCaml reportedly abandons this abstract machine), and OCaml stands for Objective CAML, commonly abbreviated as "Ocaml."
>> Unfortunately, the article does not mention some of the more >> significant programming languages (e.g., Scheme is not mentioned at >> all),
>Scheme is arguably not a significant programming language: it only has 12% >market share of functional programming languages (excluding Javascript and >C# 3.0) according to the Debian and Ubuntu package popularity contest.
You have repeatedly cited Debian- and Ubuntu- based figures in threads comparing OCaml and other languages in the past, but what about the figures on other platforms for comparison?
-- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^
On Wed, 10 Dec 2008 14:31:59 +0900, Benjamin L. Russell
<DekuDekup...@Yahoo.com> wrote: >>The "ml" in "OCaml" does not stand for "ML" so it is just "OCaml" and >>not "OCaML", BTW.
Oops; I meant "OCaml," not "Ocaml." I should have capitalized the 'C."
>Indeed, everything in the article is tainted with Haskell and does >not even concur with the interpretations of the vast majority of functional >programmers or languages.
Sorry, but I must object to your use of the pejorative term "tainted." According to Merriam-Webster Online:
>Main Entry: > taint >Etymology: > Middle English teynten to color & taynten to attaint; Middle English teynten, from Anglo-French teinter, from teint,
past participle of teindre, from Latin tingere; Middle English taynten, short for attaynten ― more at tinge, attain
>Date: > 1573
>transitive verb >1: to contaminate morally : corrupt <scholarship tainted by envy> >2: to affect with putrefaction : spoil >3: to touch or affect slightly with something bad <persons tainted with prejudice>
"Tainting" is a subjective term, and carries a negative connotation. I fail to see the justification for it in regards to Haskell as a language.
Further, although the article discusses Haskell in some sections, it does not specifically mention Haskell in the sections on Scala or Erlang, for instance. Where is Haskell mentioned in the article in these sections?
-- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^
Benjamin L. Russell wrote: > On Tue, 09 Dec 2008 18:49:55 +0000, Jon Harrop <j...@ffconsultancy.com> > wrote: >>Benjamin L. Russell wrote: >>> Dr. Dobb's recently published the following introductory survey >>> article on functional programmiing:
>>> Dr. Dobb's | It's Time to Get Good at Functional Programming | 12 3, >>> 2008
>>. Javascript and C# 3.0 are the world's most popular functional languages >>and this article about functional programming fails to mention either of >>them. Indeed, everything in the article is tainted with Haskell and does >>not even concur with the interpretations of the vast majority of >>functional programmers or languages.
> JavaScript and C# 3.0 are multi-paradigm languages, so in order to > describe them as "the world's most popular functional languages," they > need to be used by the majority of users according to that paradigm.
You cannot have a definition of "functional language" that swings on how people choose to use the language. If you want to follow that path then let me rephrase "more people are using C# 3.0 and Javascript for functional programming than any other languages". Perhaps we can agree to argue about that?
> C# 3.0 ("C# Orcas") (see "C# Version 3.0 Specification" at > http://msdn.microsoft.com/en-us/library/ms364047(VS.80).aspx) > introduced several language extensions building on C# 2.0, including > lambda expressions and expression trees, supporting the functional > paradigm; however, for a language to have a new paradigm adopted by > the majority of its users takes time. C# 3.0 was released about three > years ago, in October 2005; can you show that the majority of C# > programmers have switched from object-oriented to functional > programming?
The majority of C# programmers was never relevant. The question is whether there are more functional C# programmers than OCaml/Haskell etc. programmers and there clearly are.
According to ITJobsWatch, C# has ~500x more programmers than any of those other functional languages. So only 0.2% of them need to be using delegates for them to outnumber each of the "conventional" FPLs.
Look at language versions first. Google trends indicates that around 30% of C# searches are for C# 3.0 now:
That is the killer fact because functional programming has been an essential concept since .NET 3.0: it makes everything from IO with WCF to GUI programming with WPF much easier on Microsoft's new standard libraries.
Look at the book market. Only 2% of the C# books listed on Amazon are (explicitly) C# 3.0 but that still equates to far more books (277) in absolute terms that any conventional FPL. The book "Pro C# 2008 and the .NET 3.5 platform: Fourth Edition" covers functional programming in detail and it alone has outsold all books on all conventional FPLs combined.
However you slice and dice that data I think there is overwhelming evidence that far more programmers are writing in a functional style on .NET than anywhere else.
>>. They say that FP is hard when, in fact, most people find it much easier >>to learn than OOP.
> Most students will have a much easier time in learning a new paradigm > if they haven't already learned a different paradigm. If the students > haven't already learned OOP, then I would agree; however, un-learning > OOP can be difficult for programmers who have already been programming > according to that paradigm.
Our customers find it easy enough. We even relate functional concepts to OOP design patterns when possible.
>>Scheme is arguably not a significant programming language: it only has 12% >>market share of functional programming languages (excluding Javascript and >>C# 3.0) according to the Debian and Ubuntu package popularity contest.
> You have repeatedly cited Debian- and Ubuntu- based figures in threads > comparing OCaml and other languages in the past, but what about the > figures on other platforms for comparison?
I don't know of any decent objective and public metrics for other platforms but I think it is fair to say that the free implementations of these languages are sharply focused on Linux.
Our website hits may be an interesting metric because we do almost entirely FP now:
Windows: 160k Linux: 35k Mac: 20k
So Mac OS X appears to be dead as far as FPLs are concerned. Having tried to develop on the Mac I am not surprised: the infrastructure available for programmers is just awful compared to Linux and Windows.
Windows is obviously the major platform. Today, programming Windows basically means programming .NET and "conventional" functional programming on .NET is essentially just F# (Nemerle, Clean, Scala.NET, Clojure.NET are all dead). The LispWorks and Franz may have more Lisp programmers on Windows than other free FPLs but I cannot believe they have a bigger user base than Microsoft, not least because F# is free and interoperable.
Erlang is arguably a wildcard but the job market suggests that Erlang is in the same ball park as the other FPLs in terms of popularity. The number of Ubuntu+Debian installs of Erlang is high, higher than Haskell and almost as high as OCaml, so I expect Erlang has the same OS demographics.
A case might also be made for Mathematica, which allegedly has a huge number of users. However, I've sold a Mathematica product and found it much harder to garner users and turn a profit from it than OCaml or F#. So I don't believe Mathematica has that many users. The number of people searching for certain versions of mathematica (to disambiguate the homonym) is comparatively small:
Benjamin L. Russell wrote: > On Wed, 10 Dec 2008 14:31:59 +0900, Benjamin L. Russell > <DekuDekup...@Yahoo.com> wrote: >>Indeed, everything in the article is tainted with Haskell and does >>not even concur with the interpretations of the vast majority of >>functional programmers or languages.
> Sorry, but I must object to your use of the pejorative term "tainted." > According to Merriam-Webster Online:
>>Main Entry: >> taint >>Etymology: >> Middle English teynten to color & taynten to attaint; Middle English >> teynten, from Anglo-French teinter, from teint, > past participle of teindre, from Latin tingere; Middle English taynten, > short for attaynten ― more at tinge, attain >>Date: >> 1573
>>transitive verb >>1: to contaminate morally : corrupt <scholarship tainted by envy> >>2: to affect with putrefaction : spoil >>3: to touch or affect slightly with something bad <persons tainted with >>prejudice>
> "Tainting" is a subjective term, and carries a negative connotation. I > fail to see the justification for it in regards to Haskell as a > language.
> Further, although the article discusses Haskell in some sections, it > does not specifically mention Haskell in the sections on Scala or > Erlang, for instance. Where is Haskell mentioned in the article in > these sections?
The meaning of the phrase "functional language" has been corrupted by the Haskell community. They use it to mean "without side effects" but far more people take it to mean "providing first-class functions" and reserve the phrase "purely functional" for the Haskeller's definition. This has confused a lot of people including the author of this article.
He starts off "functional languages like Scala, F#, Erlang" which follows convention. But then he says "functional language programs avoid state and mutable data" but that is not the commonly-held interpretation. Finally he writes:
"FP languages ... cheat when it's practical to do so, breaking the pure FP paradigm in carefully controlled ways. Monads are one such trick..."
That is basically unheard of outside Haskell these days. None of the other functional languages that he named at the beginning "carefully control" side effects.
On Wed, 10 Dec 2008 09:08:26 +0000, Jon Harrop <j...@ffconsultancy.com> wrote:
>The meaning of the phrase "functional language" has been corrupted by the >Haskell community. They use it to mean "without side effects" but far more >people take it to mean "providing first-class functions" and reserve the >phrase "purely functional" for the Haskeller's definition. This has >confused a lot of people including the author of this article.
Actually, the meaning of "without side effects" is used not just within the Haskell community, but also within the PLT Scheme community as well. For example, in the entry "PLT Scheme Blog: Getting rid of set-car! and set-cdr!" (see http://blog.plt-scheme.org/2007/11/getting-rid-of-set-car-and-set-cdr...),
Matthew Flatt writes: >The map function is most beautiful when the given f is functional. If f has side-effects, the the above implementation
over-specifies map, which is traditionally allowed to process the list in any order that it wants (though PLT Scheme guarantees left-to-right order, as above). Arguably, when some other Schemer provides a non-functional f, then it’s their problem; they have to deal with the consequences (which may well be minor compared to some benefits of using mutation).
I.e., Flatt uses "functional" to mean "without side effects" as well. So, this meaning is associated not just with Haskell, but with PLT Scheme as well.
>That is basically unheard of outside Haskell these days.
Not quite. This meaning is actually quite common in the PLT Scheme community as well.
>So his article was tainted with Haskell.
Again, this definition is not just limited to Haskell. I think that the distinction is more one of functional programming languages with a more academic focus (Haskell and PLT Scheme) versus those with a more industrial focus (OCaml and F#).
-- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^
On Dec 9, 1:49 pm, Jon Harrop <j...@ffconsultancy.com> wrote:
> ...I am much more concerned by the complete lack > of useful innovation outside F#. Why are the open source functional > languages and their implementations so out of date and why are other > companies not moving to replicate F#'s success elsewhere?
Erlang seems to be doing just fine, but only in "the real world".
Re F# - hasn't it been proved by now that open source cannot *possibly* compete with Microsoft and its multibillion dollar R&D budgets??
On Dec 10, 3:32 am, Jon Harrop <j...@ffconsultancy.com> wrote:
> ... > So Mac OS X appears to be dead as far as FPLs are concerned. Having tried to > develop on the Mac I am not surprised: the infrastructure available for > programmers is just awful compared to Linux and Windows.
Can you be more specific? In terms of CLI tools, obviously there is parity between OS X and Linux (and Windows lags far behind).
What exactly in 'infrastructure' did you find lacking on OS X? A modern package manager?
Benjamin L. Russell wrote: > On Wed, 10 Dec 2008 09:08:26 +0000, Jon Harrop <j...@ffconsultancy.com> > wrote: >>The meaning of the phrase "functional language" has been corrupted by the >>Haskell community. They use it to mean "without side effects" but far more >>people take it to mean "providing first-class functions" and reserve the >>phrase "purely functional" for the Haskeller's definition. This has >>confused a lot of people including the author of this article.
> Actually, the meaning of "without side effects" is used not just > within the Haskell community, but also within the PLT Scheme community > as well. For example, in the entry "PLT Scheme Blog: Getting rid of > set-car! and set-cdr!" (see
>>The map function is most beautiful when the given f is functional. If f >>has side-effects, the the above implementation > over-specifies map, which is traditionally allowed to process the list in > any order that it wants (though PLT Scheme guarantees left-to-right order, > as above). Arguably, when some other Schemer provides a non-functional f, > then it’s their problem; they have to deal with the consequences (which > may well be minor compared to some benefits of using mutation).
> I.e., Flatt uses "functional" to mean "without side effects" as well. > So, this meaning is associated not just with Haskell, but with PLT > Scheme as well.
Sure. Most functional programmers would use "pure" and "impure" (even the Fortran community). However, Matthew Flatt is writing on his own blog and not aggressively inciting vandalism. In contrast, Don Stewart's response was "we should take charge of the wikipedia page".
Regardless, the article you cited is not self-consistent in this respect. They should not describe Scala and F# as functional and then claim that functional languages carefully control side effects using monads when, in fact, monads are virtually unheard of outside Haskell because the vast majority of functional languages do not carefully control side effects at all.
>>That is basically unheard of outside Haskell these days.
> Not quite. This meaning is actually quite common in the PLT Scheme > community as well.
The PLT Scheme community are basically unheard of:
> Again, this definition is not just limited to Haskell.
The people aggressively pushing this definition are almost entirely from the Haskell community.
> I think that > the distinction is more one of functional programming languages with a > more academic focus (Haskell and PLT Scheme) versus those with a more > industrial focus (OCaml and F#).
I cannot concur with that classification. OCaml is developed by an academic institute. Haskell's only significant implementation is developed almost entirely by Microsoft. OCaml's greater success in industry is incidental.
I just have to point out, for those who would otherwise not bother to follow that link, that it is hilarious. It shows that some of the statistics on F# have been incredibly skewed not by its great popularity as a language (about which I can say nothing) but by the fact that it shares its name with the first two characters of the popular expletive: F#@?K [Consider the background "hit" level for F# for the period before it was announced...]
> I just have to point out, for those who would otherwise not bother to > follow that link, that it is hilarious. It shows that some of the > statistics on F# have been incredibly skewed not by its great popularity > as a language (about which I can say nothing) but by the fact that it > shares its name with the first two characters of the popular expletive: > F#@?K > [Consider the background "hit" level for F# for the period before it was > announced...]
> How cool is that?
Google registered insignificant searches for F# before F# was released. So either expletives were invented when F# was released or you're wrong.
toby wrote: > On Dec 9, 1:49 pm, Jon Harrop <j...@ffconsultancy.com> wrote: >> ...I am much more concerned by the complete lack >> of useful innovation outside F#. Why are the open source functional >> languages and their implementations so out of date and why are other >> companies not moving to replicate F#'s success elsewhere?
> Erlang seems to be doing just fine, but only in "the real world".
I meant learning from F#'s strengths as a language rather than generic success. Erlang is a very different language, of course.
> Re F# - hasn't it been proved by now that open source cannot > *possibly* compete with Microsoft and its multibillion dollar R&D > budgets??
Companies are failing as well as open source:
Sun had the opportunity to build something great. They got halfway there, acquired a lot of users and then started moving in completely the wrong direction.
Novell have Mono but they are striving to replicate yesteryear's functionality from Windows and don't even intend to support F#, WPF or any of the ground-breaking work that Microsoft have already done.
Lots of other companies like IBM and Wolfram Research have a lot to gain from similar work but they are not building solid foundations.
On Wed, 10 Dec 2008 08:32:42 +0000, Jon Harrop <j...@ffconsultancy.com> wrote:
>The book "Pro C# 2008 and >the .NET 3.5 platform: Fourth Edition" covers functional programming in >detail and it alone has outsold all books on all conventional FPLs >combined.
How did obtain the sales figures? The reason that I ask is that I would like to verify this by conducting my own sales figure research, but when I searched through Google for a way to obtain sales figures, I only found a site that said that in the case of novels, actual sales figures for each publication were only known to publishers, who almost always inflated the figures in their own interest (see http://ask.metafilter.com/49470/Where-Can-I-Find-Sales-Figures-for-No...
>If you're looking for information sales figures for a single book (e.g. how many copies have been sold of The Grapes of Wrath or Beloved), it's next to impossible.
>The publisher(s) alone have the raw data and they will not tell, since it's almost always in their interest to hide and/or inflate the numbers. Even when publishers release information (such as on book cover copy of bestsellers), the number they show is the copies they printed, which is always more than the number sold.
>In some cases you could probably get best-guess estimates, but there are complicating factors even in trying to estimate.
It's not clear where I should go to obtain the raw data on the actual sales figures per title. If I could, then I could gather some evidence either to verify or refute your assertion.
Currently, the best I can do is to rely on published sales rankings, from which it is almost impossible either to verify or refute your claim that "The book 'Pro C# 2008 and the .NET 3.5 platform: Fourth Edition' covers functional programming in detail and it alone has outsold all books on all conventional FPLs combined," which relies on sales figures.
For example, according to Amazon.com, as of Thursday, December 11, 2008, at 3:06 PM (Tokyo time), the book "Pro C# 2008 and the .NET 3.5 platform: Fourth Edition" (see http://www.amazon.com/2008-NET-Platform-Fourth-Windows-Net/dp/1590598...) has an Amazon.com sales rank of "#4,434 in Books."
Collectively speaking, it should only take a few more titles like that match the sales figures for your book "Pro C# 2008 and the .NET 3.5 platform: Fourth Edition."
Can you tell me how to obtain raw actual sales figures per title for each book related to functional programming so that I can independently either verify or refute your claim based on sales?
-- Benjamin L. Russell -- Benjamin L. Russell / DekuDekuplex at Yahoo dot com http://dekudekuplex.wordpress.com/ Translator/Interpreter / Mobile: +011 81 80-3603-6725 "Furuike ya, kawazu tobikomu mizu no oto." -- Matsuo Basho^
toby wrote: > On Dec 10, 3:32 am, Jon Harrop <j...@ffconsultancy.com> wrote: >> ... >> So Mac OS X appears to be dead as far as FPLs are concerned. Having tried >> to develop on the Mac I am not surprised: the infrastructure available >> for programmers is just awful compared to Linux and Windows.
> Can you be more specific?
The last four generations of fundamental technologies that developers have been building are:
1. Unmanaged native code languages like C and C++.
2. Managed single-language VMs like OCaml and ObjC/Cocoa, improving development speed and the reliability of self-contained code.
3. Concurrent managed single-language VMs like Java, making multicore programming easier.
4. Concurrent managed common-language VMs like the CLR, spreading seemless interoperability to almost all application-level libraries and offering it all up from a multitude of languages.
Apple provided 1 and 2 as first-class citizens on Mac OS X. They collaborated to help make 3 (Java) a second-class citizen on Mac OS X. They have not even begun to provide 4 (a CLR).
In contrast, Microsoft are now migrating to the next generation, pushing higher-level languages like F# into the mainstream by building upon core functionality like tail calls that are not even available in the nearest competitor (the JVM). Microsoft are also building rapidly on their new foundation, providing safe high-level and high-performance APIs like WPF that are accessible from dozens of languages.
> In terms of CLI tools, obviously there is parity between OS X and Linux > (and Windows lags far behind).
Windows PowerShell is an obvious counter example.
> What exactly in 'infrastructure' did you find lacking on OS X?
No common language run-time and, after that, nothing built on the common language run-time.
Like Linux, Mac OS X offers only a motley crew of uninteroperable components.
> 4. Concurrent managed common-language VMs like the CLR, spreading seemless > interoperability to almost all application-level libraries and offering it > all up from a multitude of languages. [...]
There's a saying about how you can write FORTRAN in any language...