Мэдээ

C++-ээс бүрэн татгалзав: Дэлхийн хамгийн хурдан холбогч "mold 3.0" бүхэлдээ Rust дээр дахин мэндэллээ

TOGTOKHTOGTOKH·2026 оны аравдугаар сарын 5·1 үзсэн·
C++-ээс бүрэн татгалзав: Дэлхийн хамгийн хурдан холбогч "mold 3.0" бүхэлдээ Rust дээр дахин мэндэллээ

Системийн түвшний програмчлал болон хөрвүүлэгч (compiler/linker) хөгжүүлэлтийн ертөнцөд энэ долоо хоногийн хамгийн шуугиан тарьсан мэдээ дуулдлаа. LLVM төслийн үндсэн холбогч болох lld-г анх зохион бүтээсэн домогт инженер Руй Үэяама (Rui Ueyama) өөрийн бүтээсэн дэлхийн хамгийн хурдан linker болох mold-ийн 3.0.0 хувилбарыг албан ёсоор цацлаа.

Хамгийн том өөрчлөлт: Тэрээр mold-ийг олон жил хөгжүүлсэн C++ хэлнээс бүрэн татгалзаж, кодын санг эхнээс нь Rust дээр 100% дахин бичсэн (rewrite) явдал юм.

Хөгжүүлэгчдийн дунд "Rewrite it in Rust" гэдэг шоглоом болсон хэллэг байдаг ч, системийн хэмжээний чухал дэд бүтцийн хэрэгслийг C++-ээс Rust руу ийнхүү амжилттай шилжүүлж, өмнөх хурдаа нэг ч хувь алдалгүй хадгалж чадсан нь технологийн ертөнцийг гайхшруулж байна.


Mold яагаад хөгжүүлэгчдэд тийм чухал вэ?

C, C++, Rust зэрэг хэлүүд дээр томоохон систем хөгжүүлж буй багуудад тулгардаг хамгийн том дарамт бол Edit-Compile-Link cycle буюу кодоо бага зэрэг өөрчлөөд тестлэхэд хөрвүүлэг дуусахыг хүлээх цаг юм. Олон зуун мянган объектын файл, динамик болон статик сангуудыг нэгтгэн эцсийн executable бинар үүсгэх үйл явц (linking) ихэвчлэн маш удаан явагддаг.

GNU-ийн үндсэн ld болон gold холбогч нар нь олон цөмт (multicore) процессор дээр маш муу зэрэгцүүлэлт (parallelization) хийдэг сул талтай. Үүнийг шийдэхээр Руй Үэяама lld-г бүтээсэн бол 2020 оноос эхлэн орчин үеийн олон цөмт архитектурыг дээд зэргээр ашигладаг mold linker-ийг нээлттэй эхээр гаргаж ирсэн билээ. Mold нь lld-ээс дунджаар 4.9 дахин хурдан, GNU ld-ээс бүр хэдэн арван дахин хурдан ажиллаж, том хэмжээний төслийн холболтын хугацааг хэдэн минутаас хэдхэн секунд болгон бууруулдаг.


C++-ээс Rust руу: Хурд яагаад буурсангүй вэ?

Хөгжүүлэгчдийн нийгэмлэгт C++-ээс Rust руу шилжих үед санах ойн аюулгүй байдлын шалгуурууд (borrow checker, bounds checking г.м.) гүйцэтгэлд сөргөөр нөлөөлөх вий гэсэн болгоомжлол байсан юм.

Гэвч mold 3.0.0-ийн бодит хэмжилтүүдээр (benchmarks) шинэ Rust хувилбар нь өмнөх C++ дээрх сүүлийн тогтвортой хувилбар болох 2.42.1-тэй яг адилхан хурдтай ажиллаж байгааг баталлаа. Руй Үэяама санах ой руу шууд хандах паралель алгоритмууд болон өгөгдлийн бүтцийг Rust-ийн цэвэр аюулгүй болон шаардлагатай үед unsafe блокуудыг ухаалгаар хослуулан төгс шийдэж чаджээ.

Түүнчлэн хувилбарын тогтвортой байдлыг баталгаажуулахын тулд баг дараах шалгууруудыг хийсэн байна:

  • Gentoo Linux-ийн 19,000 гаруй багцыг бүгдийг нь mold 3.0 дээр эхнээс нь бүрэн хөрвүүлж шалгахад GNU ld-тэй харьцуулахад ямар ч регресс (эвдрэл) гарсангүй.
  • x86-64, ARM64, RISC-V зэрэг бүх дэмжигддэг архитектурууд дээр CI орчинд ASAN (AddressSanitizer) болон TSAN (ThreadSanitizer)-тэйгээр тестүүд 100% ногоон гарчээ.

Mold 3.0-ийн чухал өөрчлөлтүүд

Эх кодын хэл солигдсоноос гадна системийн архитектурт хэд хэдэн чухал дэвшил гарлаа:

  1. Санах ойн аюулгүй байдал (Graceful Panic): Өмнө нь эвдэрсэн эсвэл хортойгоор боловсруулсан бинар оролт (corrupted input files) ирэх үед C++ хувилбар нь Out-of-Bounds уншилт хийж undefined behavior үүсгэдэг байсан бол Rust хувилбар нь аюулгүйгээр алдаа заан унтардаг (graceful panic/error) болжээ.
  2. Виртуал санах ойн (VMM) хэмнэлт: Mold өмнө нь асахдаа шууд 8 GiB виртуал санах ой урьдчилан нөөцөлдөг байсан бол энэ удаа үүнийг бүрэн арилгажээ. Ингэснээр санах ойн хязгаартай CI/CD контейнерууд, бага үзүүлэлттэй серверүүд дээр саадгүй ажиллах боломж бүрдлээ.
  3. Хөрвүүлэх хэрэгсэл өөрчлөгдсөн: Өмнө нь CMake, Make шаарддаг байсан бол одоо Rust 1.95+ болон cargo build --release ашиглан бие даан угсарна.

GNU ld-г түлхэн унагаж, Linux-ийн анхдагч болох амбиц

Руй Үэяама энэ хувилбарын тайлбар дээр 3.x цувралын гол зорилгоо тодорхой илэрхийлжээ:

"mold 3.x-ийн гол зорилго бол GNU ld-тэй нийцтэй байдлын сүүлийн зөрүүг арилгах (ялангуяа linker script дэмжлэг), мөн mold-ийг Linux тархцуудын (distributions) систем дэх үндсэн /usr/bin/ld холбогч болгох замыг засах явдал юм."

Хэрэв энэ зорилт биелбэл Linux системүүд (Ubuntu, Fedora, Arch г.м.) бүх түвшиндээ хэд дахин хурдан хөрвүүлэгддэг болж, дэлхийн нийт хөгжүүлэгчдийн цагийг хэдэн сая цагаар хэмнэх боломжтой болох юм.


Нийгэмлэгийн маргаан: "Тахиа ба өндөг"-ний асуудал

Мэдээж уг шилжилт бүх хүнд таалагдсангүй. Hacker News дээр үүссэн гол шүүмжлэл нь Bootstrap Paradox буюу эхлүүлэлтийн асуудал байв.

Зарим бие даасан Linux дистрибьюшн хөгжүүлэгчдийн хувьд тэд C хөрвүүлэгчээр mold-ийг бүтээгээд, улмаар mold-оор дамжуулан Rust хэлний хөрвүүлэгчийг хэдэн цагийн хугацаа хэмнэн bootstrap хийдэг байжээ. Гэтэл одоо mold өөрөө Rust-аар бичигдсэн тул mold-ийг ажиллуулахын тулд заавал Rust суулгасан байх шаардлагатай болж, 'тахиа уу, өндөг үү' гэдэг хүндрэл үүссэнд багагүй бухимдаж байна. Иймээс зарим хөгжүүлэгчид C++ дээрх mold 2.42-ийг "mold2" нэрээр форк хийн тусад нь авч үлдэхээ мэдэгджээ.


Хөгжүүлэгчид өөрсдийн төсөлд яаж ашиглах вэ?

Mold-ийг төсөлдөө ашиглахад коддоо өөрчлөлт оруулах шаардлагагүй, ердөө компиляторынхаа флагт заахад л хангалттай:

  • Clang/GCC төсөлд:
    clang++ main.cpp -fuse-ld=mold -o my_app
    
  • Rust (Cargo) төсөлд: Өөрийн ~/.cargo/config.toml файлд дараах тохиргоог нэмнэ:
    [target.x86_64-unknown-linux-gnu]
    linker = "clang"
    rustflags = ["-C", "link-arg=-fuse-ld=mold"]
    

Та төслийнхөө холболтын хурдыг 2-5 дахин ихэсгэхийг хүсвэл одооноос mold 3.0-г тестлээд үзэх цаг нь болжээ.

Эх сурвалж: GitHub - rui314/mold Releases (v3.0.0), Hacker News Discussion.

Сэтгэгдэл

Ачаалж байна...