[拍子]基本原理

发件人:斯蒂芬·布洛赫(adelphi.edu的sbloch)
日期:2010年10月14日星期四美国东部夏令时06:45:18

2010年10月13日晚上11:15,马修·库里安写道:>只要处理器只能读取数字(二进制),在将Racket翻译成另一种语言(如Assembly)之前,机器就不能解释它。然后将程序集转换为数字或二进制/机器码。如果是这样,Racket必须是一种解释语言,因为它是在Assembly上分层的。这不是一个有用的定义:根据这个定义,每种编程语言都是一种“解释语言”。我提出的传统定义大致如下:*编译器将一个完整的高级语言程序翻译成完整的机器语言程序,该程序可以保存下来,以便以后由硬件直接解释。*解释器一次只查看一个语句/操作符/任何东西,它不会生成机器语言来保存并稍后运行,而是立即执行该语句或操作符。即使在那时,也没有所谓的“解释语言”,因为任何语言都可以用编译器或解释器实现;只有“解释的实现”和“编译的实现”。无论如何,在过去的三十年里,由于一些创新,这种区别变得更加模糊:*微代码和纳米代码:甚至所谓的“机器语言”实际上也不是由硬件解释的;每一条机器语言指令实际上代表一系列低级语言中的语句,这些语句由硬件解释。有时这实际上有两个层次:机器语言变成微代码,微代码变成纳米代码,由硬件直接解释。*字节码和p码:一个完整的高级语言程序被翻译成一种相当低的形式,但这并不特定于任何特定的硬件。这个字节码可以保存并从一个计算机模型传输到另一个。当您想运行它时,实际上您要运行一个“字节码解释器”,它比解释源代码快,但不如在硬件上解释机器代码快。*JIT(just-in-time)编译器:对上述“字节码解释器”的修改:当解释器看到一些可能耗时的东西(如循环)时,它实际上会将整个循环转换为机器语言,然后调用此机器语言,而不是解释循环本身的每一步。*智能流水线处理器:现代微处理器实际上可能会查看接下来的几条机器语言指令,对其进行分析,并对其进行重新排序或重新组织,以更好地利用其流水线体系结构。所以你的问题,四十年前有点没有意义,现在更没有意义了。斯蒂芬·布洛赫adelphi.edu的sbloch



发布于用户邮件列表.