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 ΡΡΠ°Π»ΠΎ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΆΠ΄Π°ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄, Π° ΡΠ°ΠΊΠΆΠ΅ Π½ΠΈΠ·ΠΊΠ°Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠΎΠ² Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΠΈΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π½Π΅ ΠΏΡΠΈΠ±Π΅Π³Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊ ΠΈΠ·Π»ΠΈΡΠ½Π΅ ΡΡΠ»ΠΎΠΆΠ½ΡΠ½Π½ΡΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°.
ΠΡΡΠΎΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ· Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π² Mold Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Π°ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΡΠ΄ΡΠ°ΠΌ CPU ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Mold ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ΅Ρ
Π½ΠΈΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΡΡΡΡΡ
Ρ
ΡΡ-ΡΠ°Π±Π»ΠΈΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈ Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ
ΡΡ Π² ΡΠ°Π·Π½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ
ΡΠ΅ΠΊΡΠΈΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru