What does it mean for a language to be ‘interpreted’?
像Ruby这样的语言(如果运行mri,我的意思是不编译成字节代码)是否在每次需要执行方法或循环体时都实际运行分析?我的意思是,要执行一个循环,你需要解析它的主体n次?
我只是一直认为所有这些程序都在引导程序中被解析一次,在"强类型"语句树中被转换,等等。这不是真的吗?
现在我要说的是,几乎所有的编程语言都被解释了,不管是软件(Ruby、Python、Java)还是硬件(C,C++)解释器:
对于一个真正的答案,虽然我不知道内部Ruby实现,但我敢肯定他们不会一遍又一遍地分析语句。在原始实现中不使用字节码时(或者它们已经迁移了吗?),它们使用一些中间表示(当您想为其编写C扩展时,可以很好地看到),因此只需一遍又一遍地执行这些表示。
口译是一个定义很松散的词。甚至机器代码指令也由处理器解释。
一般来说,在运行之前编译的语言和没有编译过程并且在另一个程序(称为解释器)中运行的语言之间有区别。后一种语言通常被称为解释语言。
这条线在某些情况下并不那么清晰:
- 有些语言可以编译或解释,例如PHP。
- 一些解释的代码可能在运行时编译成本机指令(JIT编译)。
- 有些编译语言可能具有
exec 功能,允许在运行时生成和执行代码,而不必经过正常的编译过程。