> What's the point of this Javascript hacking with suboptimal results?
Javascript performance has been making huge leaps in the past few years, and Google is helping to drive that further. Plus, penetration is hard. Javascript availability is practically 100% vs. Silverlight's 20%.
Exactly, it's not just about speed. It's about a lot of things including market penetration, language usage, and speed. By choosing Javascript, Google automatically wins on the first two points and is making Javascript kick ass in the third.
Market penetration is a -huge- aspect of coding in the browser. It's the reason Flash won't die; Adobe is really, really good at pushing the plugin on people. If people can't run your code, your code doesn't matter.
Language usage is important to developers. Javascript has the benefit of having lots of developers already using it, and requiring -nothing but a browser- to get started with it. Adobe has noticed that being developer friendly is really important, and has been making strides with Flex, making Flash development seem more familiar to traditional devs. Silverlight simply doesn't get it (http://silverlight.net/getstarted/). The platform doesn't matter if you don't have programmers building for it.
Speed is important, but only to a point. Of course, Silverlight and Flash both beat the pants off of Javascript for practically every benchmark. The important thing to remember is that Javascript doesn't need to beat them in a test, it simply needs to be fast enough.
You've mentioned that Silverlight's "tech" is better. I'm not sure what that is supposed to mean.
Google's move to push Javascript makes a lot of sense. Building another Silverlight doesn't make much sense when it is failing in every category that actually matters.
> Of course, Silverlight and Flash both beat the pants off of Javascript for practically every benchmark.
Last I checked, this is not true.
In my darker days, I spent six months on a contract developing a third party full screen media browser for Windows Media Center Edition. Windows MCE is basically a giant IE window, and your apps are web pages.
The architect benchmarked flash vs javascript at the time, and javascript won hands down for the type of work performed.
Using bubblemark in webkit, I get 58 FPS in flash vs 98 FPS in DHTML.
Wow ... in bubblemark I get ~60 FPS in Flash, ~90 FPSs in Flash (with cacheAsBitmap) and ~160 FPSs in DHTML (using Chrome). In Firefox 3.0.14 I'm getting 60 FPSs in DHTML, while the speed of Flash is the same.
Chrome's V8 engine is awesome. I never realized it.
> Silverlight apps can look just as polished as desktop apps. This is not true with DHTML/Javascript.
You should really try MobileMe, or 280slides.
There are a number of other web apps written in Sproutcore and Cappuccino that feel exactly like desktop apps, without an ounce of flash or silverlight.
Actually, there's a pretty good chance that a good Javascript engine will beat Silverlight (if it doesn't already).
The CLR is not that great. For instance, it can't optimize call-sites of virtual methods ... the JVM does it, Chrome's V8 probably does it too.
And yes, you can use IronPython and IronRuby ... but in case you haven't checked them out ... those are awfully slow (mildly put) compared to the reference or the JVM implementations (go figure).
If you can optimize the call-sites of virtual methods (a problem which isn't solved by static-typing), there's nothing inherent in static typing that guarantees faster code, except the handling of primitives ... numbers mostly, because if numbers are boxed, math is slow. But when you're building a VM from scratch (like what Google is doing with the V8) you can workaround that too (see Lua for a shiny example). Well ... there are other things too, like making classes/interfaces dynamic, but this isn't such a big problem).
What I find interesting about V8 ... even if its designed only for Javascript, the type-system itself is dynamic enough to make V8 a good target for other dynamic languages. And a modified application server could compile something like ...
<script language="ruby">
document.find('div.item').each do |item|
item.append("<i>hello world</i>");
end
</script>
... to Javascript without much trouble.
And V8 probably has certain constructs that are executed faster, so you could have a Java to Javascript compiler (like GWT) that uses those static-types that you love to generate faster Javascript.
And with HTML5, you can have your cake and eat it too (assuming Microsoft plays along, or Firefox/Safari/Opera/Chrome become much more popular ... not so hard to imagine given IExplorer's flaws, the army of developers preferring modern browsers and UE's antitrust policies).
I think Google is actually thinking javascript is going to be the base machine language of the browser. They seem to be investing a lot of effort on the V8 engine. http://code.google.com/p/v8/
Does V8 compile to a bytecode similar to Java? I know that it does JIT compilation to native code and then caches it for future use. If it happens to have a bytecode representation, we could read the Google tealeaves and conclude that Google sees compiled JavaScript as an ugly steppingstone toward a binary representation of client-side code.
AFAIK, not any remotely standardized bytecode, no. Of course, there are some data structures in between the strings of characters and the native code, but I don't think there's any talk of guaranteeing anything that would warrant calling them "byte code".
Javascript performance has been making huge leaps in the past few years, and Google is helping to drive that further. Plus, penetration is hard. Javascript availability is practically 100% vs. Silverlight's 20%.