本文最初发表在 Medium 博客,经原作者 Max Gorynski 授权,InfoQ 中文站翻译并分享。
在本文中,我们将用Python编写一个Python到C的编译器。这一点特别容易做到,因为Python有一个内置的解析器库,并且许多CPython内部构件对编写扩展程序来说都是公开的。
到本文的最后,通过几百行Python代码,我们将能够编译并运行以下程序:
$ cat tests/recursive_fib.py
def fib(n):
if n == 0 or n == 1:
return n
return fib(n - 1) + fib(n - 2)
def main():
print(fib(40))
$ python3 pyc tests/recursive_fib.py
$ ./bin/a.out
102334155
本文实现了一个非常小的Python子集,甚至完全放弃了管理内存的尝试,因为我无法理解手动引用计数。也许有一天我能找到一种方法来实现简单GC的交换,像Boehm那样。
依赖
我们需要Python3、GCC、libpython3和clang-format。
原文链接:【https://www.infoq.cn/article/eI4yJXOJM2qEwZMmINEL】。未经作者许可,禁止转载。