Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

底层实现:编译器

Python 程序可以直接运行,但这种简洁的使用方式隐藏了语言实现中的许多问题:源码怎样变成可处理的程序结构,动态值怎样跨越 C++ 接口,变量与类型怎样被记录,以及生成的本地代码怎样重新回到 Python。实现一个 Python 编译器,不只是把语法翻译成另一种语言,还需要补齐支撑这些语法的运行时和调用边界。

本书以 Matx 为基础,讨论一个受限 Python 子集怎样被转换成 C++,编译为动态库,再从 Python 中加载和调用。Matx 不追求兼容完整的 Python,而是保留一条能够实际运行的编译链路,使运行时对象、数据容器、函数调用、抽象语法树、代码生成和 FFI 可以在同一个项目中被观察。

全书沿两条相互交汇的主线展开。一条主线把 Python 源码转换为 Matx AST,并通过 Visitor 和 Rewriter 生成 C++;另一条主线实现对象、动态值、容器和函数等语言运行时机制。两条主线最终在动态模块处汇合:生成的程序通过统一的 C ABI 导出函数,Python 再经由 FFI 找到并调用这些本地实现。