所有脚本语言都是解释性的吗?

Des*_*PRG 3 scripting scripting-language interpreted-language

所有脚本语言都是解释性的吗?我还没有遇到过编译+脚本语言。以下语言都是解释语言和脚本语言。解释语言和脚本语言之间有什么联系。

例如 JavaScript、python、perl

反过来呢?

Joh*_*ler 6

根据定义,脚本语言的本质是没有单独的编译阶段。脚本语言总是需要其解释器的副本才能运行,而编译语言不需要编译器来执行生成的二进制文件。例如,在 C 中,我们首先编译为本机可执行文件,然后运行该可执行文件。在脚本语言中,我们将脚本作为文本文件输入并立即执行。

如何实现这一点是另一个问题。大多数脚本语言都是从纯解释实现开始的。不可避免的是,有用的都需要利用即时(JIT)编译速度的实现。不同之处在于,此 JIT 是在脚本运行期间完成的,并且从不产生单独的输出。脚本仍然是人类可读的文本文件,需要一些解释器才能运行。

有一些关于“边境”语言的有趣例子。Haskell 通常被编译为独立的二进制文件,但也可以作为脚本运行(至少 GHC 实现可以这样做)。Java 编译为二进制文件,但不是独立的可执行文件。必须存在 Java 运行时才能运行 Java 文件。