Categories
程式開發

实践贴:如何编写一个简单的Python编译器


本文最初发表在 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那样。

这个项目的源代码可以在Github上找到。

依赖

我们需要Python3、GCC、libpython3和clang-format。

原文链接:【https://www.infoq.cn/article/eI4yJXOJM2qEwZMmINEL】。未经作者许可,禁止转载。