kaist-cp / rv6

Other
125 stars 13 forks source link

[Closes #596] Fix `List` (Remove unsoundness, interior mutability) #598

Closed travis1829 closed 2 years ago

travis1829 commented 2 years ago

Closes #596

ListRefCell이나 tock의 list등과 달리, interior mutability를 꼭 사용해야하는 이유가 없는 것 같아 이를 제거했습니다.

travis1829 commented 2 years ago

참고로, 이 PR이 끝나면, List 관련해서 다음 작업을 할 예정입니다.

Medowhill commented 2 years ago

451 에서 ListEntry*mut Self 대신 Cell<*const Self>를 갖도록 수정했는데, 이번 PR에서는 다시 Cell<*const Self> 대신 *mut Self를 사용하도록 바꾼 것으로 보입니다. 오랜만에 보다 보니 제가 기억이 잘 나지 않는데, 혹시 예전에 Cell이 필요했던 이유와 다시 Cell이 필요하지 않게 된 이유를 정리해 주실 수 있나요?

travis1829 commented 2 years ago

결론만 말씀드리자면, Cell을 추가했던 건 예전에 제가 Cell에 대한 이해가 부족해서 그랬던 것 같습니다.

travis1829 commented 2 years ago

추가적으로, 아직 고민 중입니다만, 나중에 rv6가 intrusive_list.rs의 List 대신 https://github.com/kaist-cp/rv6/pull/495List를 사용하도록 전부 변경할 생각이 있습니다. 현재 rv6에서 list를 사용하는 곳 (MruArena, Runs)를 보면, 항상 Pin<&mut List>를 갖고 있는 (또는 가질 수 있는) 상태에서만 List/ListEntry를 mutate하는 것 같습니다.

Medowhill commented 2 years ago

답변 고맙습니다. 제가 이해한 바로는 이 PR에서 interior mutability를 제거하면서 리스트 API 사용자 입장에서는 "원래 Pin<&Self>가 필요하던 곳에 Pin<&mut Self>가 필요하게 된 것"이니 전보다 사용할 때 더 제약이 많은 intrusive list가 되었지만, rv6에서는 intrusive list를 제한적인 용도로만 사용하기에 이렇게 제약 사항이 늘어난 것이 문제가 되지 않는 것 같은데, 이게 맞나요?

travis1829 commented 2 years ago

답변 고맙습니다. 제가 이해한 바로는 이 PR에서 interior mutability를 제거하면서 리스트 API 사용자 입장에서는 "원래 Pin<&Self>가 필요하던 곳에 Pin<&mut Self>가 필요하게 된 것"이니 전보다 사용할 때 더 제약이 많은 intrusive list가 되었지만, rv6에서는 intrusive list를 제한적인 용도로만 사용하기에 이렇게 제약 사항이 늘어난 것이 문제가 되지 않는 것 같은데, 이게 맞나요?

예, 이해하신 바가 맞습니다. 그리고, 일반적인 list들 (예1, 예2)도 이런식인 것 같습니다.

jeehoonkang commented 2 years ago

bors r+

kaist-cp-bors[bot] commented 2 years ago

Build succeeded: