我们知道Linux系统结构如下:
这里的系统调用接口(SCI)是C语言实现的。
但是比如我们使用Python写的项目在Linux系统上面运行的时候,是怎么实现的呢?
因为Python是动态类型语言,执行的时候总会被编译为汇编语言执行。
这里又是怎么执行的呢? 是否还是需要通过系统调用接口?
我们知道Linux系统结构如下:
这里的系统调用接口(SCI)是C语言实现的。
但是比如我们使用Python写的项目在Linux系统上面运行的时候,是怎么实现的呢?
因为Python是动态类型语言,执行的时候总会被编译为汇编语言执行。
这里又是怎么执行的呢? 是否还是需要通过系统调用接口?
去掉预编译和jit技术的话,单纯的解释执行就是读一句翻译一句,执行一句。
其实预编译也并没有脱离这个框框,仍然是读、翻译、执行。区别仅仅是预编译后的中间结果文件格式更紧凑,或者使用了虚拟机自定义指令。java、python、javascript无不如此(java是提前预编译,js将预编译推迟到运行时,python两种都支持)。
其实解释执行说白了非常简单,就是先通过预编译把程序翻译成自定义的指令,然后逐个解释并执行,并不是直接解释源程序。由于这些自定义的指令很简单,所以翻译起来也很快。比如有s=a+b
这句代码,它翻译出来可能对应下面的指令序列:
load a (读取a的值)
load b (读取b的值)
add a b (计算a+b,结果放到a中)
store s a (将a的值存回s所在的内存)
虚拟机只要依次读取每一条指令(load、add、store),然后翻译成机器指令即可
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答800 阅读✓ 已解决
2 回答3.2k 阅读
不会啊.... ,python 的解释器是编译过的,但是 python 的程序并不会。python 程序的运行可以看成,已 .py 的文件为输入,运行 python 的解释器。