soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
第9天:字节码由字节组成!CPython并不可怕!

byterun是用于CPython生成的字节码的纯python解释器,编写用于学习和娱乐。

我学到的一些东西

CPython解释器主要位于一个名为3500的文件中ceval.c该文件的主要部分是2,000行的switch语句– switch(opcode) {...阿克

但!令人惊讶的是,该文件并不可怕。或者,它使事情看上去并不可怕。例如,有一个BINARY_SUBTRACT操作码,它减去了东西。

这是处理此问题的实际C语言代码的实际值:

TARGET(BINARY_SUBTRACT) {
PyObject *right = POP();
PyObject *left = TOP();
PyObject *diff = PyNumber_Subtract(left, right);
Py_DECREF(right);
Py_DECREF(left);
SET_TOP(diff);
if (diff == NULL)
goto error;
DISPATCH();}

{:lang ='c'}

那么,这是做什么的呢?

  1. 摆脱争论

  2. 通过查找减去它们 left.__sub__(right)

  3. 减少对垃圾收集的引用,left以及right减少垃圾收集的原因

  4. 将结果放在堆栈上

  5. 如果__add__不返回任何内容,则引发异常

  6. DISPATCH(),基本上就意味着“转到下一条指令”

我完全可以写那个。

我们花了一些时间阅读处理Python中异常处理的C代码。这非常令人困惑,但是我了解到您可以raise ValueError from Exception设置异常原因。

基本上这里的教训是

  1. byterun很好

  2. 实际上可以读取运行Python的C代码!

  3. 字节码由字节组成。就像,少于256条指令,每条指令是一个字节。



2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示