GN⁺: 리눅스를 위한 빠른 링크 도구, Wild
(github.com/davidlattimore)-
Wild 링크
- Wild는 반복적인 개발을 위해 매우 빠른 링크를 목표로 하는 도구임.
- 아직 증분 링크는 구현되지 않았지만, 현재도 상당히 빠른 성능을 보임.
- 프로덕션 빌드에서는 GNU ld나 LLD 같은 성숙한 링크 사용을 권장함.
- 개발 중 빠른 빌드 시간을 원한다면 Wild를 시도해볼 수 있음.
- x86-64 Linux에서 개발 중인 경우 사용 가능하며, 문제 발생 시 버그 리포트를 권장함.
-
설치
- 사전 빌드된 바이너리를 설치하려면 릴리스 페이지에서 명령어를 복사하여 사용할 수 있음.
- 수동으로
wild
바이너리를 경로에 복사할 수도 있음. - 직접 빌드 및 설치하려면
cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wild
명령어를 사용함.
-
기본 링크로 사용하기
- Rust 코드 빌드를 위해 Wild를 기본 링크로 사용하려면
~/.cargo/config.toml
에 설정을 추가함.
- Rust 코드 빌드를 위해 Wild를 기본 링크로 사용하려면
-
Q&A
-
왜 또 다른 링크인가?
- Mold는 이미 매우 빠르지만 증분 링크를 지원하지 않음. Wild는 증분 링크를 목표로 함.
- Rust로 작성되어 증분 링크의 복잡성을 해결할 수 있을 것으로 기대됨.
-
작동하는 기능
- 현재 지원되는 플랫폼/아키텍처: Linux의 x86-64
- 정적 링크된 바이너리, 동적 링크된 바이너리, 공유 객체(.so 파일) 출력 가능
- Rust proc-macros와의 호환성 확인됨
- crates.io의 인기 있는 크레이트 테스트 통과
- 디버그 정보 지원
-
아직 지원되지 않는 기능
- 증분 링크, x86-64 외의 아키텍처 지원, 다양한 링크 플래그 지원, Mac 및 Windows 지원 등
-
왜 또 다른 링크인가?
-
벤치마크
- Wild의 목표는 증분 링크를 통해 매우 빠른 성능을 발휘하는 것임.
- 비증분 링크에서도 가능한 빠른 성능을 목표로 함.
- 벤치마크 결과, 디버그 정보 없이 Wild는 매우 빠른 성능을 보임.
- 디버그 정보가 포함된 경우 성능이 다소 저하됨.
-
Rust 코드 링크
-
cargo test
명령어를 사용하여 Wild로 크레이트를 빌드하고 테스트할 수 있음. - Clang 컴파일러가 설치되어 있어야 하며, GCC는 임의의 링크 사용을 허용하지 않음.
-
-
기여
- Wild에 기여하는 방법에 대한 정보는 CONTRIBUTING.md를 참조함.
-
후원
- 이 프로젝트를 후원하면 더 오랜 기간 동안 풀타임으로 작업할 수 있음.
-
라이선스
- Apache License, Version 2.0 또는 MIT 라이선스 중 선택 가능.
Hacker News 의견
-
mold가 AGPL에서 MIT로 라이선스 변경 후, 새로운 빠른 링커의 필요성이 줄어들었음에도 불구하고, 이 프로젝트가 등장한 것이 놀라움. 일부 경우 mold보다 2배 빠르다는 점에서 주목할 만함
-
이전에 이 프로젝트를 살펴봤지만, 아직 프로덕션 준비가 안 된 것으로 보임. 그래서 여전히 mold를 사용 중임
-
macOS 사용자에게는 Apple이 1~2년 전에 새로운 링커를 출시했으며, Rust와 함께 사용할 경우 config.toml에 특정 설정을 추가해야 함
-
C/C++ 컴파일러가 링크 단계 없이 전체 프로그램을 하나의 단위로 빌드하는 것이 신선할 것임. 외부 라이브러리는 대부분 동적으로 링크되므로, 링크 과정을 제거해도 문제되지 않음
-
2008년 Gold, 2015년 Lld, 2021년 mold 등 빠른 링커에 대한 관심이 지속적으로 증가하고 있음
-
Rust의 인기로 인해 빠른 링커에 대한 관심이 증가하고 있으며, Rust 바이너리는 링크 단계에서 시간이 많이 소요됨. 이는 Rust만의 문제가 아니라 정적 링크와 LLVM의 최적화 때문임
-
John Levine의 "Linkers and Loaders"는 관련된 좋은 책이며, 몇 년 전에 읽었을 때 매우 흥미로웠음
-
wild, mold, ld의 성능을 비교한 결과, 잘 구조화된 프로젝트에서는 링크 시간이 큰 문제가 되지 않음을 알게 됨
-
성능 벤치마크는 2020년 모델의 System76 Lemur pro 노트북에서 실행되었으며, 4코어(8스레드)와 42GB RAM을 가짐
-
링커가 무엇인지 궁금해하는 사람도 있음
-
Linux 커널을 링크할 수 있는지 묻는 질문이 있었으며, 이는 LLD의 유용한 이정표였음