rust-lang/rust에 기여한 이야기

5513 단어 Rust

소개



이 문서는 Rust 3 Advent Calendar 2020의 13 일째입니다.

최근 rust-lang/rust (즉 Rust의 컴파일러 본체)에 처음 컨트리뷰트했으므로, 그 때의 이야기를 써 보겠습니다. 그렇다고 해도 무언가 기능을 구현했다든가 아니라 단 한 줄 추가한 것뿐입니다. 타이밍에 따라서는 이런 간단한 컨트리뷰트도 있어요, 라는 소개입니다.

덧붙여서 2일전의 어드벤트 캘린더의 기사가 매우 참고가 되기 때문에, 챌린지해 보고 싶은 분은 꼭 봐 주세요.

rust-lang/rust에 대한 code contribution을 시작부터 정중하게

경위



이 기여는 Reddit 또는 Rust User Forum에서 Source-based code coverage에 대한 게시물을 보는 것으로 시작되었습니다. (Source-based code coverage에 대해서는 이 기사를 참조해 주세요)

투고로 소개되고 있던 Issue 를 보러 가면, 「 여기 에 하는 방법 써 있기 때문에 시험해 봐」라고 되어 있으므로 조속히 시험했습니다. 그러면 중간에 사용할 도구 인 llvm-cov를 찾을 수 없습니다.

여기서 "왜 llvm-cov는 없을까?"라고 생각했습니다. 유사한 LLVM의 도구인 llvm-profdata는 다음 명령으로 설치할 수 있습니다.
$ rustup component add llvm-tools-preview

이것은 이전에 Profile Guided Optimization을 시도했을 때 넣었기 때문에 알았습니다.
그래서 Issue에게 "llvm-cov도 배포하는 것이 좋지요?"라고 쓰면서 배포가 어떻게 제어되고 있는지 조사해 보았습니다.

rust-lang/rust 아래에서 llvm-profdata를 찾으면 다음 코드를 찾을 수 있습니다. 즉, 이 배열로 배포하는 바이너리 일람을 정의하고 있다고 하는 것입니다.

src/bootstrap/lib.rs
const LLVM_TOOLS: &[&str] = &[
    "llvm-nm",       // used to inspect binaries; it shows symbol names, their sizes and visibility
    "llvm-objcopy",  // used to transform ELFs into binary format which flashing tools consume
    "llvm-objdump",  // used to disassemble programs
    "llvm-profdata", // used to inspect and merge files generated by profiles
    "llvm-readobj",  // used to get information from ELFs/objects that the other tools don't provide
    "llvm-size",     // used to prints the size of the linker sections of a program
    "llvm-strip",    // used to discard symbols from binary files to reduce their size
    "llvm-ar",       // used for creating and modifying archive files
    "llvm-dis",      // used to disassemble LLVM bitcode
    "llc",           // used to compile LLVM bytecode
    "opt",           // used to optimize LLVM bytecode
];

라는 것은 여기에 llvm-cov를 추가하면 좋을 것입니다. 추가하고 빌드하면서 이번에는 rust-lang/rust의 지금 T 리브 친 G. MD을 읽으러 갔습니다. 이런 큰 프로젝트에서는 풀 요청 등을 내는 절차가 정해져 있는 경우가 많습니다. (많은 사람이 무질서하게 내면 정리하는 것도 힘들니까요)
또한 해당 부분의 git blame도 보았습니다. 과거에 새로운 바이너리 배포판을 추가 한 사람의 PR을 확인하기 위해서입니다.

기능 추가등의 경우는, 우선 RFC를 쓰는 곳으로부터(혹은 Internals Forum 에서의 의견 모집으로부터) 시작됩니다만, typo 수정 정도라면 직접 PR가 작성되는 것 같습니다.

여러가지 본 결과, 이것 정도의 변경이라면 갑자기 PR로 해 버려 좋을 것 같다고 판단해 PR를 만들었습니다.

rust-lang/rust에서 PR은 핵심 팀의 사람에게 자동으로 할당됩니다. 할당된 Mark-Simulacrum씨는 바로 Source-based code coverage의 구현자인 richkadel씨에게 “이것으로 좋을 것 같아?”라고 물었습니다. richkadel씨도 곧바로 대답을 해 주어, PR 작성으로부터 2시간 후에는 병합 개시되게 되었습니다.
(마지막 코멘트의 @bors r+ rollup가 bot에 병합을 지시하는 명령입니다)



그 후 CI가 실행되기를 기다리고 9 시간 후에 병합이 완료되고 다음날 nightly 빌드에 반영되었습니다. 이제 llvm-cov를 llvm-tools-preview를 통해 설치할 수 있습니다.

기여하면



rust-lang에 기여한 사람은 Rust Contributors 에 이름이 올라서 조금 기쁩니다. 덧붙여서 이 목록은 rust-lang 이하의 모든 프로젝트가 대상이므로, Rust 컴파일러가 허들 높은 쪽은, 주변 툴로부터 챌린지해 보면 좋을까요. 나는 옛날 rust-lang/mdbook 의 버그 수정을 한 적이 있었으므로, 2번째의 컨트리뷰트라고 하게 되었습니다.

좋은 웹페이지 즐겨찾기