撸了将近两个礼拜,撸了一个玩具编程语言的内核,也算对当初编译原理的老师有了交代。
想到一个问题,就是主流编程语言的函数调用都是怎么实现的,是否需要一个栈来保存状态(比如我的实现方法),如果是的话不用担心爆栈吗?
比如如果我要用类似这种调用
a = 1
def in():
print(a)
def out():
a = 2
in()
这里,执行out()的话in里调用的应该是a=2而不是a=1。
以我菜鸡的水平,我的实现方式是以把上文中的函数的 ast 拷贝一份,贴到调用的那个地方,本质上是压了个栈。那很自然程序员就会想到一个问题,如果极端情况下嵌套了很多函数调用呢,栈会不会爆掉?我们都知道比如 python 默认限制递归层数不能超过 1000.....
比如如果我要写一些函数式编程的代码 a.in().out().in().out().in()........岂不是问题很大?
(不要跟我说函数式调用方式跟上文的例子根本不一样 orz )