클로저랑 비슷하게 컴파일러가 Generator를 구현한 익명 상태머신 타입을 만들어줌 얘는 클로저랑은 다르게 컨텍스트가 저장될 필요가 있어서 Pin을 받음 Pin이 없으면 제너레이터 객체가 이동할때 로컬참조가 다 박살나서 UB임
해당 댓글은 삭제되었습니다.
Rust에서 move는 모든 타입에대해 제약이 없는데 코루틴처럼 이동이 unsafe한 타입(!Unpin)들을 이동하는걸 unsafe하게 만들어주는 래퍼임
얘를들어 코루틴에 Box를 감싸면 이동이 안전해짐(Unpin) Box가 이동해도 내부 포인터값은 안변하니까 그래서 Pin《코루틴타입》은 못쓰고 Pin《Box《코루틴타입》》은 쓸수있음
주로 async await할때 모든 코루틴을 박싱안해도 코루틴을 덕지덕지 바른 !Unpin 타입을 맨 위에서 스택이나 힙에 딱 한번만 할당하면 성능과 안전을 다 챙길수있는것
저기에 카피도 구현할 수 있음? - dc App
땔스는 저런게 없고 당연히 복사도 못해서 조금 십창인부분 있는데 복사되면 써먹을곳 많을듯 - dc App - dc App
코루틴 객체가 복사되냐고? 컴파일러가 만들어준건 Clone 구현안함
이것도 마찬가지로 복사하면 로컬참조가 댕글링이 돼버려서 UB임
근ㄷ 이거 언제 stable에 들어올 예정?