如何看待微软 12 月 5 日宣布准备开源其 JavaScript 引擎 Chakra 的核心部分?

软件工程师、主攻高级编程语言虚拟机的设计与实现

422 👍 / 23 💬

问题描述

Microsoft Edge’s JavaScript engine to go open-source 上看到,微软准备在下个月开源其 JavaScript 引擎 Chakra 的核心部分("ChakraCore")。文中介绍说 Chakra 在运行速度和对 ES6 的支持上都是业界领先的。


我感觉和 coreclr 一样, Chakra 肯定是花了相当大的投入,其代码一定值得一看。

一句话:微软大法好!

今天一早就听说了这个消息,兴奋不已。可惜今天一天都不在家,刷知乎不够及时没抢先发这个问题/讨论,哈哈~

等源码真的放出之后有机会再来更新。

(2016-01-13更新:开源啦!

Github地址:

Microsoft/ChakraCore · GitHub

Chakra从诞生之时开始就非常有竞争力,在许多方面它在现代主流JavaScript引擎里都是领先的,或者说是特别的。它的源码是非常好的学习资料,如今即将能看到它开源出来自然振奋人心。

例如它的GC,它是主流产品里少有的用内存页写保护的方式来实现并发GC的写屏障(write-barrier)的。参考:

Advances in JavaScript Performance in IE10 and Windows 8

用Node.js对V8的GC有所不满的同学们,或许Node.js/Chakra是个有趣的选择。

又例如它的JIT编译器里的类型推导与V8、JavaScriptCore、IonMonkey之间的异同,也会是很有趣的方面。

Chakra的数据流分析看来也做了不少工作,很好奇它具体做了啥,它是怎么用FlowGraph / FlowEdge的。

还有,Chakra的code gen在对抗heap spray之类的攻击方面也下了不少功夫,也是值得外界学习的方面。

不知道Chakra的JIT编译器在需要重量级优化的地方有什么对策。JavaScriptCore率先投入重磅的基于LLVM的FTL,V8也跟着开始开发新的TurboFan,SpiderMonkey则通过OdinMonkey在asm.js场景取巧,那Chakra拿什么来应对?拭目以待。


题主提到了Chakra与CoreCLR相比,我觉得Chakra搞不好比CoreCLR更有值得学习的地方——从VM实现者的角度来说。

Chakra的架构师,Steve Lucco,之前是在CLR组做架构师的。但我的个人猜测,他在CLR组干得或许不太得志——他在加入微软前还设计过一个名为OmniVM的VM,然而后来CLR的设计与实现还是更多的受JVM和Anders的影响,而与OmniVM的设计理念有许多不同。

Chakra应该是让Steve全权新设计的,这下就爽了,各种重型武器毫无吝啬的都扔了进去。


当然,微软也不会平白无故决定把这么重量级的程序开源出来。

看来开源的目的之一跟CoreCLR一样,是希望得到社区力量的支持来帮助Chakra移植到其它平台上。大家有兴趣在Linux或者Mac上用Chakra的话,这下就有福了,而且也可以向其贡献自己的力量。


有些Chakra很特别的或者说曾经领先的地方看来不会包括在这次开源的ChakraCore里。


顺带放几个传送门:

JavaScript 可以开发 Windows 8 应用,但为什么它不是直接运行在 CLR 上,而又重新弄了一个虚拟机 Chakra? - RednaxelaFX 的回答如何对比 v8 跑 node.js 和微软的 Chakra 跑 node.js? - 互联网