Open efenniht opened 5 years ago
본격적으로 Refactoring을 하기에 앞서서 어떻게 하면 좋을 지 나름의 생각을 정리해 보았습니다:
여기서 목표는, 평가 수단이자 refactoring 방향의 이정표입니다.
unsafe
궁극적으로 모든 unsafe 코드를 고칠 수는 없지만, 줄이는 것은 검증에 도움이 됩니다. 어떤 코드가 unsafe Rust인지는 Rust book에 나와 있습니다: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html
좀 더 공격적으로 unsafe한 코드를 fine graining 해 봅시다!
현재 코드를 많은 부분 OOP스럽게 만들 수 있습니다:
new()
Option
Result
enum
SPCI_SUCCESS
HfVCpuRunReturn
intid
{mm, mpool, page}.rs
*addr_t
api.rs
if blah { return -1; }
?
RawSpinLock
SpinLock
api_vcpu_prepare_run
cpu.rs
vm.rs
pub
dlog.c
lock
WRITER
SpinLock<XXXState>
Arc
각각의 항목에 대해서 세부 issue를 만들 예정입니다. 또 다른 제안 사항이 있으시면 말씀해 주세요~
api.rs 에 있는 goto 문, 그리고 if blah { return -1; } 과 같은 코드를 RAII와 ? 로 깔끔하게 만들기 - 이걸 먼저 하지 않으면 다른 api.rs 리팩토링을 할 때 실수할 가능성이 높아집니다!
본격적으로 Refactoring을 하기에 앞서서 어떻게 하면 좋을 지 나름의 생각을 정리해 보았습니다:
목표
여기서 목표는, 평가 수단이자 refactoring 방향의 이정표입니다.
unsafe
block의 수와 양 줄이기궁극적으로 모든 unsafe 코드를 고칠 수는 없지만, 줄이는 것은 검증에 도움이 됩니다. 어떤 코드가 unsafe Rust인지는 Rust book에 나와 있습니다: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html
좀 더 공격적으로
unsafe
한 코드를 fine graining 해 봅시다!Encapsulation
현재 코드를 많은 부분 OOP스럽게 만들 수 있습니다:
new()
로 초기화하기Use rich type system
Option
또는Result
로 나타내기: #34enum
사용하기방법
쉬움
enum
으로 바꾸기 (ex.SPCI_SUCCESS
): #13HfVCpuRunReturn
enum
으로 바꾸기: #13intid
에 대한 type alias 만들기: #13{mm, mpool, page}.rs
에 있는 주소를*addr_t
로 바꾸기: #13중간
api.rs
에 있는 goto 문, 그리고if blah { return -1; }
과 같은 코드를 RAII와?
로 깔끔하게 만들기RawSpinLock
대신SpinLock
쓰기, 단순히 전체를 lock하는 것으로 시작: #20api_vcpu_prepare_run
에 대하여, 대기 중인 PR 반영하기 (#10 과 관련): #22api.rs
에 있는 코드를 다른cpu.rs
나vm.rs
로 분산시키기 (접근하는 데이터에 따라서)pub
제거하기: #12dlog.c
의lock
함수가 Rust의WRITER
lock을 잡도록 하기: #어려움
SpinLock<XXXState>
로 만들기Arc
같은 걸 집어넣기각각의 항목에 대해서 세부 issue를 만들 예정입니다. 또 다른 제안 사항이 있으시면 말씀해 주세요~