Origami404
2021-07-09 19:06:01 +08:00
我跟朋友稍微讨论了一下,觉得这个行为难点主要有:
1. 析构不好做,控制流乱飞难理解
2. 可能当这个 lambda 被调用的时候定义它的函数(简称定义函数)跟调用定义函数的函数(简称调用函数)的栈帧都已经被弹出(这种情况可能出现在定义函数将 lambda 整体返回之后调用函数再将其返回直到调用调用函数的函数再调用 lambda )
3. 我朋友说 λ-expr 应该是无副作用的,而这个很明显是个副作用,所以哲学上不对味... (当然考虑 C++的 lambda 使用引用捕获外部变量再修改的情况可以得知其实存在有语言的 lambda 是可以有副作用的)
这种行为的实现方式我大概想了一下,可能使用 c++搭配 setjmp 跟 longjmp 可以实现,但是不一定能完美实现(可能会有一些对象的生命周期问题)。
如果能够完美实现的话其实还是有一定用处的,比如可以拿这种行为来实现整个程序级的“时间倒流”(做法类似于我上面提到的在上层函数调用下层函数定义的带 return 的 lambda )(就像 Vue 的调试工具那种)
随便想想,可能会有不足,欢迎大家指正