在 withoutboat 的固定地点基础上进行扩展

主要观点:

  • 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”问题,多年讨论后仍能取得进展。
阅读 12
0 条评论