mold 3.0.0, Rust 전면 재작성
최근 30일 조회수 — 좋아요 —핵심 요약
고속 링커 mold가 성능과 호환성을 유지하며 Rust로 전환하고 안전성과 주요 오류를 개선했다.

고속 링커 mold 3.0.0이 C++ 코드를 Rust로 전면 재작성한 첫 정식 버전으로 출시됐다. 직전 버전인 2.42.1이 C++로 작성된 마지막 릴리스다. 개발진은 3.0.0을 2.42.1의 즉시 교체용 버전으로 설계해 명령줄 옵션과 지원 아키텍처를 그대로 유지했으며, 명시된 버그 수정을 제외하면 같은 결과물을 만든다고 밝혔다.1
재작성 과정에서도 링크 성능은 2.42.1과 같은 수준을 유지했다. 개발진은 지원 대상별 테스트 모음을 실행하고, 실제 작업과 여러 옵션 조합에서 두 버전의 출력물을 비교했으며, 젠투(Gentoo)의 모든 패키지를 빌드해 호환성을 확인했다. 이 검증에서는 회귀 문제가 발견되지 않았다. mold 3.x의 다음 목표는 링커 스크립트 지원을 중심으로 GNU ld와 남은 호환성 차이를 줄여, 리눅스 배포판이 mold를 기본 링커로 채택할 기반을 마련하는 것이다.1
Rust 전환은 손상된 입력 파일을 처리할 때의 안전성도 높였다. C++ 버전은 메모리 범위를 벗어나 읽다가 세그멘테이션 폴트로 종료될 수 있었다. 3.0.0은 해당 읽기를 범위 검사해 잘못된 접근 지점에서 패닉으로 멈춘다. 오류 자체를 복구하는 것은 아니지만, 범위 밖 메모리를 그대로 읽는 동작은 차단한다.1
빌드 방식과 호환성 수정
소스에서 빌드하는 절차는 달라졌다. CMake 대신 Cargo를 사용하며 Rust 1.95 이상과 C 컴파일러가 필요하다. 빌드는 cargo build --release, 테스트는 cargo test로 실행한다. CMake 옵션은 제거됐고, 배포판이 지원 대상을 고르는 MOLD_TARGETS 변수는 Cargo 기능으로 대체됐다. 병렬 처리 라이브러리 oneTBB 의존성도 없어졌다. mimalloc 3.5.3은 이전처럼 정적으로 링크하지만 --features system-allocator로 시스템 메모리 할당자를 선택할 수 있다.1
이번 릴리스는 정적 실행 파일과 버전 스크립트를 함께 쓸 때의 충돌, 출력 파일을 입력 파일로도 지정했을 때 생기던 충돌이나 결과물 손상, 여러 -r 관련 오류를 고쳤다. --gc-sections가 --init과 --fini로 지정한 함수를 제거하던 문제와 일부 비결정적 출력도 수정했다. 이름이 같은 공통 심볼의 크기와 정렬을 GNU ld·LLD와 같은 방식으로 처리하는 등, Rust 재작성과 함께 기존 링커와의 동작 차이도 줄였다.1
Footnotes
읽기 목록은 이 브라우저에 저장됩니다.
출처
- Release mold 3.0.0 · rui314/mold — Hacker News
이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.