一些编译器与解释器的理解

概述

在19年拜读完Python解释器以及PHP部分解释器并未完全理解。当时主要关心于几个问题,解释器在干嘛?为什么?怎么干的?导致出现区域性片面的理解。直到今年读到内核才逐渐理解,碰巧看到LLVM(大佬思路就是清晰)。简单描述个人的理解,如果有问题欢迎大佬斧正。

编译器&&解释器基本理解

基本原理是使用语法扫描器和词法扫描器,将触发的锚点,按照逻辑执行。
区别解释器是将触发锚点后,统一程序之中执行。“统一程序之中”这就好比在Python运行之后看到是Python.exe将.py脚本载入后执行。
编译器(类JVM排除)是将触发锚点,生成代码,优化代码,最终生成目标程序。“生成的目标程序”他是怎么执行的?不同的系统存在不同的API接口,所以“生成的目标程序”也是按照规则去调用API接口。(例如使用类似反射等等)

Python 是什么样子?

其他的不熟悉,还是以Python举例。
通常看起来Python是一个黑框框,如下:
在这里插入图片描述
实际它是这样的:
在这里插入图片描述
为啥差距那么大?
因为黑框框只是console,入口后面要进行语法和词法分析和迭代。这才有的这幅图。

编译器是什么样子?

对于编译器了解并不多,稍微有一丢丢了解,其一LLVM,其二JVM。LLVM是单系统编译单系统运行。JVM是一次编译到处运行(这货有虚拟机充当JAVA和计算机之间的翻译官)。

LLVM也可以解决跨平台问题,它是这样的:
在这里插入图片描述
JVM 长这样子:
在这里插入图片描述
两者分别有什么特点优势,我了解不够多,不太好说。请看知乎大佬的评论
https://www.zhihu.com/question/47819047

猜你喜欢

转载自blog.csdn.net/qq_35476650/article/details/119641807