从引擎角度讲,为什么浏览器只运行JS,不能原生扩展其他语言?
2021-09-14
几年前有一个类似的问题:从引擎的角度来看,为什么浏览器只运行JS,不能原生扩展其他语言? -
综上所述,原因有很多。最重要的是,一个浏览器支持多语言(及其VM)并不划算(这个观点也被我记忆中的JS之父Eich解释过)。引入一门新语言的好处一定要大到代价高昂,而且这样的条件在历史上是从来没有过的,可以断言以后也不会发生。 IE历史上唯一能支持多语言的特例,是因为语言引擎不包含在浏览器中,而是包含在OS中,而不仅仅是服务于浏览器。
基于目前各大浏览器厂商(当然只能算是浏览器内核厂商,如果你是一堆就别想了),理论上微软可以考虑直接在浏览器中支持,但实际上,目标是兼容 ES6+ 的一个超集。最好在其额外的特性进入ES标准后,直接作为js引擎的升级来支持。另外,我也考虑过加入Dart,但我放弃了。目前最接近多语言的是各大主流js引擎厂商共同开发的web,但它并不是新的语言和vm,而是现有js的扩展。
IE 垄断时期可能是唯一可以开发多种语言的时期。但是vbs语言本身也有很多缺点,比如语言特性不如js灵活,是私有语言,不是标准。此外,混合编程存在错误处理等问题,垃圾回收机制的差异导致混合编程容易出现内存泄漏。这些都阻碍了vbs的普及或vbs/js的共存。关键是微软并没有通过大幅改善浏览器编程环境来大力推广vbs,而是停止了几年浏览器的开发。当 IE 垄断期过去后,浏览器上将不再有第二语言取代 js。
附注。有一个答案又臭又长,所以很神秘,还包含了很多低级错误(比如vbs有安全问题而js没有),我讨厌这种严重浪费读者心智的答案时间前端编程语言,我已经反对了。加上没有帮助。建议所有同意我答案的同学也提出反对意见和帮助,这个不好的答案尽快折叠。
【更新:回答不好答案的作者】你可能知道我强烈批评了某本JS书前端编程语言,最近我也强烈批评某本JS书的翻译太烂了。如果这些书的作者和译者跳出来说我很努力,你太天真了,读者又不是傻子,你无权干涉,你觉得有道理吗?
请注意,我已经明确表示,我讨厌这种糟糕的答案,而不是针对您个人。年轻的时候也写过很多自以为是的技术文章(也许现在)。相反,对于那些烂书和烂译本,我可能不仅仅针对书本身。我要直接诅咒出版商。你明白其中的区别吗?
[更新] 为什么这个答案是一个糟糕的答案,请参考这个答案下的评论。