La filosofía de diseño central de Rust se basa en su capacidad para proporcionar abstracciones de coste cero, donde los tipos basados en librerías pueden sentirse como características nativas del lenguaje. Sin embargo, existe una brecha técnica entre las referencias integradas (como `&T` y `&mut T`) y los punteros inteligentes definidos por el usuario (como `Arc`, `Pin` o envoltorios personalizados de FFI). Mientras que las referencias integradas admiten el re-préstamo automático y la proyección de campos —lo que permite que el comprobador de préstamos entienda que un programador está accediendo a una parte específica de una estructura—, los punteros inteligentes personalizados carecen actualmente de estas capacidades. Esto a menudo obliga a los desarrolladores a utilizar métodos incómodos como `.as_deref_mut()` o macros complejas para lograr los mismos resultados.
Para abordar esto, el equipo del lenguaje Rust está trabajando en el proyecto 'Beyond the &'. La solución propuesta implica exponer la noción interna del compilador de un "lugar" (place) al código del usuario. En Rust, un "lugar" es una ubicación donde se pueden leer o escribir valores, similar a los lvalues de C. El equipo planea introducir un nuevo tipo de manejador para cada puntero inteligente. Al permitir que los usuarios implementen traits específicos (como `ReadPlace`, `WritePlace` y `BorrowPlace`) en estos manejadores, se puede enseñar al compilador cómo interactuar con punteros personalizados como si fueran referencias nativas. Esto permitiría funciones como la proyección de campos para punteros `NonNull` o el re-préstamo automático para tipos como `MutexGuard` sin requerir la desreferenciación manual.
Si bien el proyecto tiene como objetivo simplificar el modelo mental para los desarrolladores, introduce nuevas complejidades con respecto al diseño y la sintaxis del lenguaje. Por ejemplo, el equipo todavía está debatiendo la mejor manera de representar la creación de un nuevo puntero inteligente a través de `BorrowPlace`, considerando si utilizar el símbolo `&` existente o un nuevo símbolo como `@`. Además, algunos críticos han cuestionado si estos cambios podrían aumentar la curva de aprendizaje del lenguaje al añadir más comportamiento implícito al operador de punto (`.`). El proyecto permanece en una fase de prototipo, y el equipo busca la retroalimentación de la comunidad para asegurar que el diseño se adapte a diversos casos de uso antes de convertirse en una parte estable del lenguaje.
