JavaScript的功能是不是都是靠C或者C++这种编译语言提供的?

感觉JavaScript的运行环境都是编译语言写出来的,那么对于一些与操作系统或者复杂运算等功能,是不是都是靠编译语言完成,然后由JavaScript调用这种方式实现的?那JIT技术在编译成机器码后,编译后的机器码能否脱离解释器独自运行呢?
关注者
615
被浏览
70688
虽然rfx讲的很好,我觉得还有可以补充的余地。
一个人实现js引擎的时候本能地用c或c++来实现,是因为他们给了我们贴合计算机本身执行机制的机会。或者按rust社区的习惯叫法,给了我们贴近bare metal的能力。
这方面,rfx给的那个rust runtime的链接提到一点,就是runtime本身是可以剥离的,就是这种bare metal的一种体现。


为什么需要bare metal呢?或者说为什么人们会想用贴近bare metal的方式来实现js解释器呢?这是因为想要让软件运行地更快的方法就是让计算机做更少的事,这需要我们精细地控制计算过程。

解释器使用了远离计算机本身的构造的抽象,这就剥夺了我们贴近bare metal的能力。

因此当我们说某某任务需要关注性能所以无法用解释型语言来做,并不是说编译型语言就一定能行:只不过解释器不允许代码的设计者靠近bare metal,这时候只能仰仗解释器的作者,只有解释器的作者在其中有机会靠近bare metal来充分使用硬件的能力,这等于说让项目的性能目标失去了控制。