The inconceivable types of Rust: How to make self-borrows safe (2024)
В Rust считается невозможным одновременно передавать объект и ссылку на этот объект, даже косвенно, что породило бесчисленные вопросы на Stack Overflow. Однако автор утверждает, что это ограничение не является фундаментальным, и предлагает рассматривать проблему через призму поддержки безопасных самозаимствований (self-borrows) через реализацию безопасных асинхронных функций. Хотя в Rust 1.33 появился тип Pin для работы с немovable типами, он позволяет только работать с ними, но не создавать в безопасном коде.
Автор предлагает десахарировать асинхронные функции в 100% безопасный Rust код, который пользователь мог бы написать сам. Это не только сделало бы язык более прозрачным, но и открыло бы путь для самозаимствований. Основная проблема, по мнению автора, заключается в том, что в Rust невозможно назвать типы локальных переменных, что и мешает реализации полноценной поддержки самозаимствований в безопасном коде без накладных расходов.