我读了很多关于解释、编译、即时编译等的东西,但是我还没有找到关于为什么JS被创建为解释性语言以及为什么仍然没有编译js的能力的明确解释代码。
我有一些想法,但我不确定其中任何一个:
- 如果浏览器可以执行(或只是传递给操作系统)二进制代码,那么这将是一个很大的漏洞,因为任何命令都可以注入到二进制代码中(例如,从文件系统中删除所有文件)。如果这是真的,是否可以教浏览器以某种方式验证二进制代码?对于后端来说这不是问题。那么,为什么NodeJS不能执行编译后的JS(PHP、Python也是如此,为什么它们是解释型的)?
- 二进制代码无法进行优化。真的是这样吗?优化的解释型 js 比编译(二进制)js 更快吗?
- 不同的CPU(架构)需要不同的二进制代码。这意味着不可能为任何客户端生成通用的二进制代码。这就是为什么 WebAssembly 模块使用一些中间代码?再说一次,为什么不对后端使用编译代码呢?
如果有人能解释上述一些或任何其他原因,我将非常感激。