- 主题:讨论一下rust所有权的概念,所有权=析构责 吗? (转载)
【 以下文字转载自 Rust 讨论区 】
发信人: beep (菜M.喵星耗子), 信区: Rust
标 题: 讨论一下所有权的概念,所有权=析构责 吗?
发信站: 水木社区 (Thu Oct 27 00:05:32 2022), 站内
ownership 其实是一个比喻性的概念,对不熟悉这个名词源流的初学者来说,往往一头雾水。所以想讨论一下,这个东西的核心本质是不是其实就是说 duty of dropping?
我自己目前的结论是,“所有权”主要就是等价于“析构责”,一个变量 own 一个堆资源,其实就是说这个变量需要在他自己出栈销毁的时候负责顺便把那个堆空间也销毁掉(通过 Drop::drop);
其次,所有权还影响可变性。如果一个容器性质的变量 C own 很多成员堆资源,那么如果这个容器 C 是一个 mutable place expr, 那么其内部成员,比如 C[index], C.field, *C (C impl DerefMut<T> 但 C 不是 &mut T)也应该是 mutable place expr。当然这一条并不那么重要。
--
修改:beep FROM 123.120.189.*
FROM 123.120.189.*
没什么好讨论的,葵花宝典说得很清楚:
<The Rust Programming Language>
本来 ownership 这个概念就是用于内存管理的,所以你理解成用于析构很正常。
按书里面说的,不同的程序设计语言,用不同的方法来管理内存:
1)Some languages have garbage collection
2)in other languages, the programmer must explicitly allocate and free the memory.
3)Rust uses a third approach: memory is managed through a system of ownership with a set of rules that the compiler checks.
具体到 Rust,先按书里面的 3 原则来理解:
1. Each value in Rust has an owner.
2. There can only be one owner at a time.
3. When the owner goes out of scope, the value will be dropped.
其他更多细节参考书里面的对应章节:
https://doc.rust-lang.org/stable/book/ch04-00-understanding-ownership.html
【 在 beep 的大作中提到: 】
: 【 以下文字转载自 Rust 讨论区 】
: 发信人: beep (菜M.喵星耗子), 信区: Rust
: 标 题: 讨论一下所有权的概念,所有权=析构责 吗?
: ...................
--
FROM 101.71.39.*
所以根据第三条,理解为析构责是很合适的,是吗?
【 在 Naory 的大作中提到: 】
: 没什么好讨论的,葵花宝典说得很清楚:
: <The Rust Programming Language>
: 本来 ownership 这个概念就是用于内存管理的,所以你理解成用于析构很正常。
: ...................
--
FROM 123.120.189.*
谁拥有资源(比如内存),谁就负责在不用时清理资源。
其他人不得瞎掺和,不然就可能会导致重复清理、没人清理(leak)、清理完又跑去使用(use-after-free)等等各种错误。
--
FROM 114.241.227.*
有没有干脆挥霍内存的躺瓶语言?
【 在 Naory 的大作中提到: 】
: 没什么好讨论的,葵花宝典说得很清楚:
: <The Rust Programming Language>
: 本来 ownership 这个概念就是用于内存管理的,所以你理解成用于析构很正常。
: ...................
--
FROM 218.12.17.*
java?
【 在 tgfbeta 的大作中提到: 】
: 有没有干脆挥霍内存的躺瓶语言?
--
FROM 121.33.160.*
php啊
【 在 tgfbeta 的大作中提到: 】
: 有没有干脆挥霍内存的躺瓶语言?
--
FROM 114.253.33.*
好奇,rust有没有循环所有权问题?
【 在 beep 的大作中提到: 】
: 【 以下文字转载自 Rust 讨论区 】
: 发信人: beep (菜M.喵星耗子), 信区: Rust
: 标 题: 讨论一下所有权的概念,所有权=析构责 吗?
: ...................
--
FROM 114.253.33.*
有呀,rust并不能阻止内存Leak,只是能阻止内存被瞎用(不用unsafe的情况下)
【 在 roy 的大作中提到: 】
: 好奇,rust有没有循环所有权问题?
:
--
FROM 183.56.163.*