主要观点:
- Rust 中值可被“移动”,
&mut T
情况下可移动T
,这导致自引用类型等情况出现问题,Pin
虽能解决部分问题但使用较繁琐。 - Withoutboats 提出在 Rust 语言中添加“固定位置”的概念,用
pinned mut
声明,还可用于函数参数和返回值,以更好地处理不可移动类型的情况,如与 C++字符串的交互。
关键信息: - Rust 维护者 Withoutboats 发布文章Pinned places,讨论
Pin
相关问题及解决方案。 - 现有
Pin<&mut T>
的限制及使用时的繁琐,如创建栈上的固定引用需宏,重借用需手动等。 - 提议的新语法,如
pin mut
声明固定位置,fn take_and_return(pin something: Foobar) -> pin Foobar
声明固定函数参数和返回值。 - 以与 C++字符串交互为例说明固定函数参数和返回值的用处,但需要 GCE 实现。
重要细节: - “地方”(places)本质是可存储值的内存区域,如局部变量、引用、结构体字段等。
Pin::new_unchecked
是不安全函数,编译器无法检查是否遵守Pin
的承诺。- cxx book's section on
std::string
提到 Rust 代码不能按值获取 CxxString。 - 需实现 GCE 才能使固定函数参数和返回值的用法生效,这是一个工程挑战。
结论:不确定这些提议在未来几年是否会被实现,但其是值得思考的方向,能缓解“Rust async is painful”问题,多年讨论后仍能取得进展。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。