Expand description
The AST pointer.
Provides P<T>
, a frozen owned smart pointer.
Motivations and benefits
-
Identity: sharing AST nodes is problematic for the various analysis passes (e.g., one may be able to bypass the borrow checker with a shared
ExprKind::AddrOf
node taking a mutable borrow). -
Immutability:
P<T>
disallows mutating its innerT
, unlikeBox<T>
(unless it contains anUnsafe
interior, but that may be denied later). This mainly prevents mistakes, but also enforces a kind of “purity”. -
Efficiency: folding can reuse allocation space for
P<T>
andVec<T>
, the latter even when the input and output types differ (as it would be the case with arenas or a GADT AST using type parameters to toggle features). -
Maintainability:
P<T>
provides a fixed interface -Deref
,and_then
andmap
- which can remain fully functional even if the implementation changes (using a special thread-local heap, for example). Moreover, a switch to, e.g.,P<'a, T>
would be easy and mostly automated.
Structs
- An owned smart pointer.
Functions
- Construct a
P<T>
from aT
value.