I was not laughing about the Java2d part more capable as well. I have been doing Java for over seven years (1.0.2-1.4), most of the time as my preferred development environment. Now I use .NET/C# for various reasons. So I have a pretty good grasp what Java2d is capable of and what .NET 2d is capable of and Java2d is simply not "much more capable".
I've been doing Java since 1.0alpha1, and .NET's pre-WPF stuff looks to me tobe pretty anemic compared to what you get with J2D+JAI. What's the pre-WPF equivalent of RenderableImage for example?
As for Flash, I'd done plenty of it, in fact, I developed a compiler to translate W3C XForms to Flash in 2002, to the point that forms as complicated as 1040 tax applications could be translated.
Flash is good enough just like HTML and Javascript is "good enough", and frankly, I think Flash is worse than SVG+SMIL+HTML+JS. Web development is a major PAIN, especially all the headaches Microsoft has caused by refusing to implement standards. Flash fails for me because of the same reason Silverlight does. It is a proprietary single-vendor stack which needs pricely devtools. I am no fan of it, I just think it's there, and I target what my visitors have.
Rich Internet Applications violate many Web principles that have served to scale the web for ages. Good luck getting Google to index content in Silverlight apps (no, I don't think indexing XAML files will cut it), or letting users bookmark page state. I'm sure theyll be a hack for it, but search engine optimization is massively important for many public sites.
Silverlight to me seems to be good for a few niche component apps and intranet stuff, I don't see it being wildly deployed, anymore than Applets.
Also, I think the design of XAML is *terrible*, utterly *terrible*. Beyond ignoring everything learned by W3C groups over the last decade about how to design markup languages (anyone writing XAML by hand is a plan masochist. )
I'm not all that interested in JavaFX, but look at the elegance of declaring an animation in JavaFx with duration variables
vs the XAML equivalent!
Code:
<Rectangle.RenderTransform>
<RotateTransform x:Name="myTransform" Angle="45" CenterX="25" CenterY="25" />
</Rectangle.RenderTransform>
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="myTransform"
Storyboard.TargetProperty="CenterX"
From="0" To="100" Duration="0:0:10" />
</Storyboard>
</BeginStoryboard>
JavaFx syntax is so elegant and easy, that you don't really need a WYSIWYG IDE ($$$)
Nice! Let's see how it develops. Personally I would have preferred a self-contained VM (like Silverlight) to a full-blown JRE, but maybe I'm splitting hairs here.
Sun is paring down a version of the JRE for browser integration called the "Java Kernel" and it will be on-par with the side of the Silverlight binary. For example, the base language VM and bootstrap (e.g. "Hello World") have been reduced to 2.6Mb already.
JavaFx BTW is targeted at mobile devices, sort of Sun's version of OS X CoreAnimation for phones.
*) That reminds me of countless discussions I had with self-acclaimed C++ gurus year ago (well before .NET was born) when I was doing mostly Java. They told me that Java was poised to fail because C++ performance was superior. Go figure.
There was a time when .NET performance was terrible. C# 3.0 has many nice things going for it that make it even better than Java. But, I don't like Microsoft owned technology, and I hate the design of Microsoft class libraries. MS being more of a dictator than Sun opts to change .NET much more rapidly than Java (similar to the speed of how DX evolved vs ARB OGL. DX1-6 sucked terribly, eventually, with DX9, and now DX10, the programming interface is on par, but the design still has some issues compared to OGL's abstraction) Look at the debate over adding generics to Java for JDK5, or the huge debate over Closures and Type Inferencing today.
**) About those benchmarks: David Dagastine is using Hotspot for his benchmarks. That's fine when you want to compare server performance. But there are two problems with this.
Hotspot refers to both the client and server VM. Both are called Hotspot. And in Java7, there won't be a distinction, as they will merge into a hybrid compiler that will select between interpreted, client, and server optimizer depending on runtime profiling and heuristics.
So I think we can conclude that Java performance is not really superior for client application scenarios.
I think you'll find that Java6's client hotspot is still faster on raw code, especially since GC ergonomics means it can automatically tune the GC algorithms by detecting your machine's capabilities, rather than ask a user running an app in his browser to select GC algorithms.
Yes, .NET has improved massively (also .NET CF blows donkeyballs compred to CDC Hotspot)
Silverlight to me means expensive MS IDEs for script kiddies to make flashy, but HTTP/REST-incompatible apps, but by and large, you are not going to see Yahoo, Google, and most major sites replace their interface with it, anymore than people used Flash or Java for say, discussion forums.
It might make some inroads on intranets and Flash-oriented sites, but frankly, I'd prefer an open-source, open standards alternative technology, designed to correctly mesh with Web principles.
BTW, Silverlight Beta crashes big time for me often, even with simple examples I've written, especially on OS X. I actually have a framework that generates AJAX, Flash, or pure server-side apps, and I ported some of it to Silverlight today, and it crashes Silverlight badly inside OS X Firefox 2.0.