1P by neo 1달전 | ★ favorite | 댓글 1개
  • 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에 설정을 추가함.
  • 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의 유용한 이정표였음