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가 이를 제대로 처리하지 못해, 보통의 대답은 "프로그램을 다른 언어로 다시 작성하라"임