python用什么写的:主体依托C语言进行底层源码开发
当初跟同门蹲在老旧机房扒开源文档,纠结python用什么写的,凭着早前学过一点C++的零碎印象,武断认定整套解释器全依托C++搭建,兴冲冲从官网拉取CPython源码压缩包,解压之后没细看目录结构就启动编译脚本,终端密密麻麻蹦出报错红字,弹窗提示头文件路径缺失,连着耗掉一下午的课余时间,手边的笔记本写满杂乱的报错代码,反复调整编译器参数也没法正常生成可执行程序,那会儿压根没意识到,内核和扩展模块的开发语言还分成两套不同体系。
隔壁桌的学长路过瞟了眼满屏报错,随手点开源码根目录,指着Makefile文件,挨个标注文件夹归属,语气慢悠悠的拆解开我之前片面的认知,顺带翻出早年Python创始人发布的开发手记,上面清清楚楚标注初代解释器选用ANSI C作为开发基底。
整个CPython解释器最核心的虚拟机、内存管理逻辑,全部是标准C编写,没有掺入半分C++的类与封装语法,像那个Objects文件夹,存着所有基础数据类型的底层实现,int、字符串的底层结构体全是C原生代码,只有后期部分第三方拓展库,会混合C++来开发专属功能,原生官方发行的Python本体,从初代版本延续至今,底层主干牢牢绑在C语言身上。
曾抱着省事的念头,试着用Python脚本改写解释器内核代码,改动几行字符后再次编译。
折腾两三天才醒悟,源码里确实存在不少.py后缀的内置脚本,也就是标准库内容,这部分是用Python自身语言编写的,平常我们导入的os、sys基础模块,一部分是C编译的动态链接库,另一部分直接是原生Python源码,放在Lib文件夹里面,打开文件夹就能直接用文本编辑器修改内容,改完不用重新编译解释器,重启终端就能生效,当初分不清底层内核和上层标准库的区别,才闹出想用脚本替换C内核的乌龙,白白浪费大把空闲时间,连着好几晚泡在实验室核对每个文件夹对应的代码属性,逐个区分开C源码目录和Python脚本目录,反复对比两类文件修改后的运行差异,慢慢捋清两层代码各自负责的工作边界。
社团组织源码实操测试那天,特意修改一处C源码里的数字常量。
改动C文件之后必须完整重新编译整个解释器,编译耗时动辄十几分钟,改完再调用对应函数,输出结果跟着常量同步变动,这下实打实分清两种代码的运行逻辑,底层C代码编译成机器码依附系统运行,上层Python脚本由解释器逐层解析执行,两者共同拼凑出完整的Python运行环境,反正市面上常说的Cpython,名字里的C就是对应底层开发语言,再不少新手入门的教程里,也容易把标准库脚本和内核源码混为一谈。
还有小众的PyPy版本,不在这个范畴内,那套解释器的开发主体换成RPython,别和官方原版弄混。
收拾完桌上散乱的打印源码,随手关掉机房亮起的显示器,起身去楼下便利店买水。