像 C# 和 java 这样的编译语言具有即时编译器,可以将它们(从字节码)转换为机器码(0 和 1)。VBScript 之类的解释性语言如何转换为机器代码?它是由操作系统完成的吗?
4 回答
它们不一定会转换为机器代码(通常不会)。
该程序的解释器根据程序的需要运行适当的操作。
一些解释器可能会生成机器代码(使用 JIT 编译器),其他解释器可能会坚持对脚本的简单解释。
我知道这是旧的,但鉴于我不能评论(代表),我想添加一个澄清的答案:
解释器用于将脚本(无论是 VBScript、javascript、python 或任何其他脚本)解释为单独的指令。这些指令可以是机器代码或中间表示形式(操作系统或其他程序可以使用)。一些解释器是为更接近汇编语言而设计的,源代码或多或少是直接执行的。
大多数现代脚本语言(例如,Python、Perl、Ruby)被解释为中间表示,或者被解释为中间表示并编译为(又名机器,又名对象)代码。重要的区别(与编译语言相比)是解释器不会获取整个代码体并将其含义转换为机器代码,而是一次获取每一行并将其含义解释为独立单元。
将此视为将整篇文章从英语翻译成俄语(编译代码)与将文章中的每个句子直接翻译(解释代码)之间的区别。您可能会得到类似的效果,但结果不会完全相同。更重要的是,将整篇文章作为一个整体进行翻译比将一个句子作为一个独立的单元翻译要花费更多的精力,但是对于说俄语的人来说,整个翻译比相当笨重的句子更容易阅读- 句子版本。因此,编译代码与解释代码之间的权衡。
来源: https://en.wikipedia.org/wiki/Interpreter_(computing),经验
这是我一直在寻找的答案。像 javascript 引擎一样,曾经有一个 vbscript 引擎,可以将人类可读的代码转换为机器代码。这个 vbscript 引擎类似于 CLR 和 JVM 中的 JIT 编译器。只是它直接从人类可读的代码转换为机器代码。与具有中间字节码的 C# 相反。
参考这篇VB Script 维基百科文章,
- 当 VB 脚本在浏览器中执行时,它用于
vbscript.dll
解释 VB 脚本。 - 当从命令行或批处理文件执行 VB 脚本文件时,将
cscript.exe
用于解释 VB 脚本。 - 当 Windows 操作系统本身将 VB 脚本用于各种目的(例如在任务栏的右上角显示错误消息框或黄色通知消息)时,它会被解释为使用
wscript.exe
哪个 Windows 服务。