Is stacked borrow too restrictive to be used with Pin
?
#527
Labels
cantfix
This cannot be worked on because it can be resolved only after a proper fix in another project
rv6에 대한 이슈는 아니지만, 여기에 쓰는 편이 의견을 나누기 좋을 것 같아 여기에 씁니다.
Rust standard library
Pin
문서의 self-referential struct 예시에는 다음과 같은 코드가 있습니다.Stacked borrow에 따르면
let slice = NonNull::from(&boxed.data);
에서 만들어진 raw pointer는 바로 이후에&mut boxed
을 하면 무효화되기 때문에slice
를 사용하는 것은 UB입니다. 예를 들어, 다음과 같은 코드를 그냥 실행하면hello
가 출력되지만, Miri로 실행(-Zmiri-track-raw-pointers
플래그 필요)하면unmoved.read()
를 할 때 UB가 탐지됩니다.Standard library 문서에 나올 정도로 전형적이면서도 단순한 self-referential struct의 예시라고 생각되는데, 여기에조차 stacked borrow 관점에서 보았을 때 UB가 있다면, Rust에서 stacked borrow를 어기지 않으면서 self-referential struct를 만들 방법이 있는지 의문이 듭니다.
The text was updated successfully, but these errors were encountered: