本帖最后由 你有种再说一遍 于 2024-8-8 20:50 编辑
由于AutoLisp语言是global的,不是local的,所以就有把全局变量转为局部变量的骚操作.
其实大家更喜欢的是默认局部变量,然后要全局才声明,而局部变量由编译器自动计算生命周期,而不是自己填入函数后面的括号. 这就不得不补充CPU运行原理了,
每个函数运行时都会开辟栈帧,栈帧内变量其实不存在释放(删除资源表记录/置0),而是修改对齐栈指针(ESP或RSP寄存器)来结束函数.
而堆则会进行删除资源等操作.
也就是其实AutoLisp全是跑堆上面的... 那么如果要做一个编译器,就可以自行计算生命周期,然后把这个代码到局部函数的头尾了.
例如lispTolisp,然后vlide编译第二份lisp.
不过既然那么复杂,为什么不直接lispToArx/lispToCsharp呢.
|