I had a drunken rant about this one with Craig and Geir at the bar at ApacheCon
last night (sorry guys! :). I'll try repeat the essence of my ramblings
in a more sober state...
One of the main marketing messages of .NET appears to be - hey we have lots of different languages, C#, VB and some other ones too
etc. This tries to stack up with Java which runs on any platform but
has only 1 standard language; The whole of .NET only really runs
properly on 1 platform, windows, but hey, you get to choose your
language! Given then choise of choosing a language or choosing a
platform I can imagine some windows based developers being tempted by
the language choice.
Sun has always maintained that there is just one Java language
& vm & platform. Whilst I applaud Sun's efforts to stop certain
vendors applying the embrace & extend strategy to Java, keeping the
platform well defined & a standard - I think Sun is harming the
Java platform a little with this stance.
The JVM seems pretty similar at least conceptually to the .NET CLR;
there seems little to choose between them (other than maybe the CLR
interfaces neater with C). Be that as it may there is zero reason why
high level languages like python, perl, ruby, smalltalk, lisp, dylan,
groovy, even C# and so forth can't all work extremely well on the JVM -
together - mixing and matching the languages together in the same
process. e.g. look at Jython, beanshell & groovy for
examples. Indeed there are already heaps of languages available for the JVM.
Incidentally as an aside it wouldn't be that hard to layer other
language compilers like JRuby / dylan / smalltalk on top of Groovy's
AST and bytecode generation to have a (say) ruby-to-bytecode
implementation of JRuby.
In many ways Groovy started as an experiment to show people that you
don't have to turn your back on the whole Java platform, JDK, J2EE and
the huge community & collection of open source tools, utilities,
IDEs and tools just to get nice new syntax like python / ruby.
So I think Sun should embrace the heaps of languages available for the JVM and include these in its marketing message. i.e. it can keep the Java = 1 syntax, 1 vm & 1 platform that runs anywhere
message - but also add that it includes the 'Java Thingy' (sorry,
private joke from yesterdays Geronimo session). i.e. the Java
platform also includes a bag of extra languages which allow developers
to include higher level languages or scripting languages as first class
citizens in the Java platform.
So the Java platform = 1 standard language, 1 vm, 1 platform + a
collection of alternative scripting languages (Java Thingy). Then
developers get the best of all worlds - choose any OS, any JVM
implementation and mix and match any language syntax efficiently with
any other library all on the same rich API platform & large active
developer community. Suddenly with this vision, .NET doesn't seem so
attractive; its main advantage then is more - use it if you wanna have
tight integration to windows.