ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° Mold, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ LLVM lld

Rui Ueyama, Π°Π²Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° LLVM lld ΠΈ компилятора chibicc, прСдставил ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° Mold, Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎ скорости связывания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΈ GNU gold ΠΈ LLVM lld. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°Π½ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ для Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² качСствС Π±ΠΎΠ»Π΅Π΅ быстрой ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ GNU linker Π½Π° Linux-систСмах. Из ΠΏΠ»Π°Π½ΠΎΠ² Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ выпуск отмСчаСтся Π΄ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎ готовности ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ macOS, послС Ρ‡Π΅Π³ΠΎ начнётся Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ Mold для Windows.

Mold написан Π½Π° языкС Π‘++ (C++20) ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ AGPLv3, которая совмСстима с GPLv3, Π½ΠΎ Π½Π΅ совмСстима с GPLv2, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ открытия ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сСтСвых сСрвисов. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ финансированиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ — Π°Π²Ρ‚ΠΎΡ€ Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° ΠΊΠΎΠ΄ для пСрСлицСнзирования ΠΏΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ MIT, ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ‡Π΅ΡΠΊΡƒΡŽ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ для Ρ‚Π΅Ρ…, ΠΊΠΎΠ³ΠΎ Π½Π΅ устраиваСт AGPL.

Mold ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС возмоТности GNU linker ΠΈ отличаСтся ΠΎΡ‡Π΅Π½ΡŒ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ — ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° выполняСтся со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, всСго Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ простого копирования Ρ„Π°ΠΉΠ»ΠΎΠ² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ cp. НапримСр, ΠΏΡ€ΠΈ сборкС Chrome 96 (Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ΄Π° 1.89 Π“Π‘) Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² c debuginfo Π½Π° 8-ядСрном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΡ€ΠΈ использовании GNU gold тратится 53 сСкунды, LLVM lld — 11.7 сСкунд, Π° Mold всСго 2.2 сСкунды (Π² 26 Ρ€Π°Π· быстрСС GNU gold). ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ Clang 13 (3.18 Π“Π‘) Π² GNU gold трСбуСтся 64 сСкунды, Π² LLVM lld — 5.8 сСкунд, Π° Π² Mold — 2.9 сСкунды. ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ Firefox 89 (1.64 Π“Π‘) Π² GNU gold Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ 32.9 сСкунд, Π² LLVM lld — 6.8 сСкунд, Π° Π² Mold — 1.4 сСкунды.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° Mold, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ LLVM lld

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ удобство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π·Π° счёт сокращСниС оТидания Π² процСссС формирования исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΈ тСстирования ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠœΠΎΡ‚ΠΈΠ²ΠΎΠΌ ΠΊ созданию Mold стало Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ нСобходимости ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ внСсСния измСнСния Π² ΠΊΠΎΠ΄, Π° Ρ‚Π°ΠΊΠΆΠ΅ низкая ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ² Π½Π° многоядСрных систСмах ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π½Π΅ прибСгая ΠΏΡ€ΠΈ этом ΠΊ излишнС услоТнённым модСлям, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°.

Высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈΠ· большого числа ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… компилятором ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Mold достигаСтся использованиСм Π±ΠΎΠ»Π΅Π΅ быстрых Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ распараллСливаниСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ доступными ядрам CPU ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ эффСктивных структур Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π² Mold Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° выполнСния интСнсивных вычислСний ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, использованиС быстрых Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ символов, сканированиС Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈ дСдупликация ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Ρ… сСкций.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru