▲GN⁺ 2024-07-22 | parent | ★ favorite | on: Rust의 Pin에 대해서 알아보기(without.boats)Hacker News 의견 Pin이 이해하기 어려운 이유는 공식 문서에서 명확하게 설명되지 않기 때문임 문서에서 "Pin은 객체가 절대 이동하지 않도록 보장한다"고 주장하지만, 이는 사실이 아님 대부분의 일반 객체는 Unpin이므로 Pin은 보통 아무런 역할을 하지 않음 Pin이 실제로 작동하는 타입 T의 집합은 매우 특이하고 문서에서 충분히 강조되지 않음 Pin이 어려운 이유는 자체적으로 의미가 없기 때문임 Pin<&mut InnerType>의 경우, 언어나 표준 라이브러리에서 Pin이 무엇을 할 수 있고 할 수 없는지 알려주지 않음 대신, InnerType 제공자가 추가적인 (내부적으로 안전하지 않은) 메서드와 API를 만들어 핀된 객체를 조작할 수 있게 함 Pin<P> 자체의 유일한 목적은 더 적은 "내재된 기능"을 제공하는 포인터를 제공하는 것임 제목에 "rust"를 추가해야 기사 내용이 무엇인지 알 수 있음 "value identity"라는 용어는 Mojo의 문서 어디에서도 정의되지 않았음 Dave Abrahams의 "Value Semantics: Safety, Independence, Projection, & Future of Programming" 강연을 추천함 Pin은 기술적으로 정확하지만 이해하기 어려운 이름의 좋은 예임 "Drop"은 더 익숙한 의미를 가지지만, "pinning"은 그렇지 않음 "immovable!(…)"이 더 나을지 모르겠지만, 더 나은 이름을 생각하기 어려움 "prevent_moving!(…)"과 같은 설명적인 이름과 PreventMove 트레이트가 더 나을 수 있음 Rust와 유사한 언어에서 move-constructors가 있다면 Pin의 필요성이 사라질 수 있음 사용자가 객체를 파괴할 방법이 없기 때문에 이동할 방법도 없을 것임 &mut 참조를 통해 mem::swap/replace로 객체를 이동할 수 있지만, 실제로 필요한 경우는 드묾 이동-참조를 선택할 수 있는 방법이 있었으면 좋겠음 swap과 replace를 안전하지 않게 만드는 것이 문제를 해결할 수 있을 것임 WithoutBoats는 비동기 반복자, poll, pin 주제에 대해 활발한 토론을 진행 중임 언어의 세부 사항에 대해 공개적으로 깊이 논의하는 커뮤니티가 거의 없으며, 이를 보는 것이 매우 흥미로움 Pinning/!Move는 비동기/대기 외에도 많은 용도로 유용함 하지만 Rust가 이를 제대로 처리하지 못해, 보통의 대답은 "프로그램을 다른 언어로 다시 작성하라"임
Hacker News 의견
Pin이 이해하기 어려운 이유는 공식 문서에서 명확하게 설명되지 않기 때문임
Pin이 어려운 이유는 자체적으로 의미가 없기 때문임
제목에 "rust"를 추가해야 기사 내용이 무엇인지 알 수 있음
"value identity"라는 용어는 Mojo의 문서 어디에서도 정의되지 않았음
Pin은 기술적으로 정확하지만 이해하기 어려운 이름의 좋은 예임
Rust와 유사한 언어에서 move-constructors가 있다면 Pin의 필요성이 사라질 수 있음
&mut 참조를 통해 mem::swap/replace로 객체를 이동할 수 있지만, 실제로 필요한 경우는 드묾
WithoutBoats는 비동기 반복자, poll, pin 주제에 대해 활발한 토론을 진행 중임
Pinning/!Move는 비동기/대기 외에도 많은 용도로 유용함