浏览器只运行 JS,不扩展其他语言的原因

从引擎角度讲,为什么浏览器只运行 JS,不能原生扩展其他语言?

总结下,原因有很多,最主要的是,一个浏览器支持多个语言(以及其VM)是很不经济的(此观点我记忆中JS之父Brendan Eich也阐述过)。引入一个新语言的好处必须大到足以cover其代价,而这样的条件历史上从来没满足过,且可以断言将来也不会发生。历史上唯一特例IE可以支持多个语言是因为语言引擎并不包含在浏览器中而是在OS中,也不仅仅只服务于浏览器。

以当前的浏览器的主要厂商(当然只能算浏览器内核厂商,一帮做壳的就甭想了),理论上微软可以考虑在浏览器中直接支持TypeScript,不过从实际上看,TypeScript的目标本来就是兼容ES6+的超集,不如在其额外特性进入ES标准后再直接作为js引擎的升级来支持。另外Google曾考虑过在Chrome中加入Dart,但已经放弃了。目前最接近多语言的是所有主流js引擎厂商正在联合开发的Web Assembly,但它并非另起炉灶创造新的语言和vm,而是在现有js上的扩展。

IE垄断时期可能是唯一有可能发展出多种语言的时期,然而vbs语言本身也有许多缺陷,比如语言特性不如js灵活,是私有语言不是标准等。另外混合编程存在问题,如错误处理,又如垃圾回收机制的不同导致混合编程很容易内存泄漏。这些都阻止了vbs的流行或vbs/js的共存。关键一点,微软并未通过大力改进浏览器编程环境来力推vbs,反而停止了浏览器开发长达数年。当IE垄断时期过去后,浏览器上就不可能再有取代js的第二种语言了。

skip

微信小程序开发公司

展开阅读全文

没有更多推荐了,返回首页