感觉zig的defer没有c++的raii和rust的drop好用 #290
xinyang-go
started this conversation in
观点交流
Replies: 3 comments
-
|
zig 毕竟讲究没有隐式执行流。ArrayList(ArrayList(i32)) 在 deinit 的时候如果把内部也 deinit 就不符合 zig 的原则了。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
最简单的办法就是把结构包装一下。不过我认为zig的做法是正确的,因为析构或者说释放一些资源是一个多方面的动作,对于没有分配器的C++/Rust来说可以直接释放,但是一旦遇到了“部分所有权”,“不完全所有权”,还有许多底层操作的话RAII/Ownership就会变成地雷。支持泛型但是不支持接口/特征也加重了这一点问题,不过既然zig不是HM类型的ML,这倒是保持了内存透明也挺好的。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
我认为语言最重要的是自恰,如果存在隐藏逻辑能把内部的一起析构,那么这个feature在当前版本的zig就变成了一个异物。zig还没有发展到把这种东西纳入进来的程度(也有可能是不会往这个方向发展) |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
该问题主要存在于泛型类中。
例如容器在deinit的时候没法把保存在容器中的元素也deinit。ArrayList(ArrayList(i32))在defer的时候得手动先把内部deinit再把外部deinit。
虽然可以通过反射判断元素是否存在deinit函数,来选择性deinit元素,但依然存在两个问题:
Beta Was this translation helpful? Give feedback.
All reactions