本文最初發表在 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】。未經作者許可,禁止轉載。