"所有节目都被解释".怎么样?

Cha*_*hak 14 perl

计算机科学家将正确地解释所有程序都被解释,唯一的问题是在什么级别.- perlfaq

如何解释所有程序?

unp*_*nic 19

Perl程序是程序读取的文本文件,perl它使perl程序遵循一系列操作.

Java程序是一个文本文件,它已被转换成一系列字节代码,然后由java程序解释,以遵循一系列动作.

AC程序是一个文本文件,通过C编译器转换为汇编程序,由汇编程序转换为机器代码.机器代码被加载到内存中,使CPU遵循一系列操作.

CPU是由硬件工程师布置的混合晶体管,电阻器和其他电气位,因此当应用电脉冲时,它将遵循由物理定律控制的一系列动作.

物理学家目前正在研究制定这些规则的方法以及解释方法.


从本质上讲,每个计算机程序都由其他东西解释,将其转换成其他东西,最终转化为当地社区中的电子如何飞来飞去.


EDIT/ADDED:我知道上面的内容有点笨拙,所以让我添加一个稍微不那么傻的补充:

只需一个简单的步骤,就可以将解释语言从文本文件转换为计算机上运行的文本.

编译语言是您必须在中间采取额外步骤将语言文本转换为机器或字节代码的地方.

通过简单的转换可以很容易地将后者转换为前者:

创建一个名为的程序interpreted-c,它可以接受一个或多个C文件,并且可以运行不带任何参数的程序:

#!/bin/sh
MYEXEC=/tmp/myexec.$$
gcc -o $MYEXEC ${1+"$@"} && $MYEXEC
rm -f $MYEXEC
Run Code Online (Sandbox Code Playgroud)

现在你的C程序属于哪个定义?比较和对比:

$ perl foo.pl
$ interpreted-c foo.c
Run Code Online (Sandbox Code Playgroud)

  • +1然而,Java HotSpot和类似的JIT机器码可能是完整的...而且不确定如何对Parrot上的Perl进行分类等等...(同样,对于它的价值,.NET提供了一种方式-JIT"荷兰国际集团). (2认同)
  • 不存在“编译语言”或“解释语言”。语言是一种语言,您可以为它编写编译器或解释器或两者兼而有之。语言本身并不限于其中之一。例如还有C解释器,很多语言都有解释器和编译器。顺便说一下。编译器只是转换为另一种语言的东西。如果您有一个将 JavaScript 转换为 Perl 的程序,它也是一个编译器。顺便说一句,`perl` 在执行之前将 Perl 代码编译为字节码,然后执行它,就像 java 一样。 (2认同)

Lou*_*uis 6

处理器在运行时解释机器代码,因为提供给某个拱门(x86,PowerPC等)的处理器的相同机器代码在理论上应该相同,无论特定型号的"内部布线"如何.

编辑:

我忘了提到一个arch可能会为访问新寄存器等内容添加新的指令,在这种情况下,编写使用它的代码将无法在该范围内的旧处理器上运行.就像您尝试使用旧版本的库然后尝试使用仅在较新的库中找到的功能一样.

示例:许多Linux发行版仅作为686发布,尽管它是在'x86系列'中.这是由于使用了新的说明.


ike*_*ami 5

我的第一个想法是看看CPU内部 - 见下文 - 但这不对.答案远比那简单得多.

CPU的高级描述是:

1. execute the current op
2. grab the next op
3. goto 1
Run Code Online (Sandbox Code Playgroud)

将它与Perl的解释器进行比较:

while ((PL_op = op = op->op_ppaddr(aTHX))) {
}
Run Code Online (Sandbox Code Playgroud)

(是的,这就是整件事.)

毫无疑问,CPU是一名翻译.

它只是表明对某些东西进行分类是如何无用的解释.


原始答案:

即使在CPU级别,程序也会被重写为更简单的指令,以允许CPU更快地执行更多指令.这是通过改变它们的执行顺序并行执行它们来完成的.例如,英特尔的超线程.

更深层次的是,每条指令都被认为是一个自己的程序,用于路由电子信号.见微码.