动态语言在Linux操作系统的执行

我们知道Linux系统结构如下:

clipboard.png

这里的系统调用接口(SCI)是C语言实现的。

但是比如我们使用Python写的项目在Linux系统上面运行的时候,是怎么实现的呢?

因为Python是动态类型语言,执行的时候总会被编译为汇编语言执行。

这里又是怎么执行的呢? 是否还是需要通过系统调用接口?

阅读 2.4k
2 个回答
因为Python是动态类型语言,执行的时候总会被编译为汇编语言执行。

不会啊.... ,python 的解释器是编译过的,但是 python 的程序并不会。python 程序的运行可以看成,已 .py 的文件为输入,运行 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),然后翻译成机器指令即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题