Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring: big picture. #11

Open
efenniht opened this issue Jul 31, 2019 · 1 comment
Open

Refactoring: big picture. #11

efenniht opened this issue Jul 31, 2019 · 1 comment

Comments

@efenniht
Copy link
Collaborator

efenniht commented Jul 31, 2019

본격적으로 Refactoring을 하기에 앞서서 어떻게 하면 좋을 지 나름의 생각을 정리해 보았습니다:

목표

여기서 목표는, 평가 수단이자 refactoring 방향의 이정표입니다.

unsafe block의 수와 양 줄이기

궁극적으로 모든 unsafe 코드를 고칠 수는 없지만, 줄이는 것은 검증에 도움이 됩니다. 어떤 코드가 unsafe Rust인지는 Rust book에 나와 있습니다: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html

  • Dereferencing a raw pointer
  • Calling an unsafe function or method
  • Access or modify a mutable static variable
  • Implement an unsafe trait

좀 더 공격적으로 unsafe한 코드를 fine graining 해 봅시다!

Encapsulation

현재 코드를 많은 부분 OOP스럽게 만들 수 있습니다:

  • 정말로 필요한 경우를 제외하고 field를 private으로 만들기
  • 전역 함수 대신 method를 사용하기
  • new() 로 초기화하기
  • RAII

Use rich type system

방법

쉬움

중간

어려움

  • 누가 owner이고 누가 borrower인지 파악해서 raw pointer 멸종시키기!
  • 각각의 lock이 어떤 데이터를 배타적으로 만드는 지 확인하고 그에 알맞게 SpinLock<XXXState> 로 만들기
  • 레퍼런스를 field로 가지는 경우 적당히 Arc 같은 걸 집어넣기
  • Intrusive list 개선하기 (?)

각각의 항목에 대해서 세부 issue를 만들 예정입니다. 또 다른 제안 사항이 있으시면 말씀해 주세요~

@jeehoonkang jeehoonkang pinned this issue Jul 31, 2019
@efenniht
Copy link
Collaborator Author

api.rs 에 있는 goto 문, 그리고 if blah { return -1; } 과 같은 코드를 RAII와 ? 로 깔끔하게 만들기 - 이걸 먼저 하지 않으면 다른 api.rs 리팩토링을 할 때 실수할 가능성이 높아집니다!

efenniht pushed a commit that referenced this issue Nov 26, 2019
* Add Apache license header to Rust files.

* Add Apache license header to Rust files.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant