JavaScript 可以开发 Windows 8 应用,但为什么它不是直接运行在 CLR 上,而又重新弄了一个虚拟机 Chakra?

关注者
143
被浏览
8737
关于微软的几种JavaScript引擎(准确说是JScript引擎)我整理过一些资料链接:
JScript:hllvm.group.iteye.com/g
Managed JScript:hllvm.group.iteye.com/g
Chakra:hllvm.group.iteye.com/g

楼主所问的,真正的大战应该在2007-2008年左右就打完了。
2007年在CLR之上新研发的DLR正在如火如荼的开发着,上面原计划要支持首批4种语言实现:IronPython、IronRuby、Managed JScript与VBx。结果只有IronPython完整的活了下来,IronRuby完成1.1后来就没人维护了,Managed JScript惨遭取消,VBx还稍好后来融合进了VB.NET 10。

为啥上述4种语言实现就Managed JScript没完成就被彻底取消了呢?
很明显浏览器是微软的平台策略的重要组成部分。而在2008年Google推出Chrome之后整个业界都受到了重大冲击,各家都不得不重新开始大力投入资源制作优秀的浏览器实现,其中就包括高效的JavaScript引擎。
基于CLR/DLR可以很轻易的实现出性能优于老JScript的JavaScript引擎(2007年的Managed JScript在早期阶段就已经比IE8/JScript 5.8快了),但受到CLR基础设计的限制,想要达到“超越V8”的目标非常非常困难。微软当然不会接受只比自家的老JScript快却远不及V8的性能水平,所以选择了把资源投给JScript组去制作全新的、native的JScript,也就是后来的Chakra。这么一来Managed JScript就没资源继续下去,只好取消掉。

Chakra是在Windows 8之前随着IE9面世的。楼主问为啥Win8的WinJS app不跑在CLR而跑在Chakra上,其实Chakra已经不是“重新弄了一个虚拟机”,而是原本就在那里现成的选择。反之,至今微软自家并没有合适的能运行现代JavaScript的基于CLR/DLR的引擎,所以Chakra是用JavaScript写Win8 app的唯一合理选择。

顺带一提,DLR并不是CLR的一个模块,而是完全在CLR之上的一个用C#实现的普通的库。以前写过篇老文章介绍DLR的,欢迎参考:rednaxelafx.iteye.com/b