Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡ Π°, ΡΠ΅ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ crates.io Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΏΠ°ΠΊΠ΅Ρ rustdecimal, ΡΡΠ΄ΡΡΠΆΠ°Ρ Π·Π»ΠΎΠ²ΡΠ΅Π΄Π΅Π½ ΠΊΠΎΠ΄. ΠΠ°ΠΊΠ΅ΡΡΡ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ rust_decimal ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡ ΠΎΠ΄ΡΡΠ²ΠΎ Π² ΠΈΠΌΠ΅ΡΠΎ (typesquatting) Ρ ΠΎΡΠ°ΠΊΠ²Π°Π½Π΅ΡΠΎ, ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π½ΡΠΌΠ° Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° Π΄ΠΎΠ»Π½Π° ΡΠ΅ΡΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ·Π±ΠΈΡΠ° ΠΌΠΎΠ΄ΡΠ» ΠΎΡ ΡΠΏΠΈΡΡΠΊ.
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΠ°Π·ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠ΅ ΠΎΠΊΠ°Π·Π° ΡΡΠΏΠ΅ΡΠ½Π° ΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½ΠΈΡΡΠ°, ΡΠΈΠΊΡΠΈΠ²Π½ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π΄ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° (~111 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½ΠΈΡ Π½Π° rustdecimal 1.23.1 ΠΈ 113 Ρ ΠΈΠ»ΡΠ΄ΠΈ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ rust_decimal 1.23.1) . Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½ΠΈΡΡΠ° Π±ΡΡ Π° Π½Π° Π±Π΅Π·Π²ΡΠ΅Π΄Π΅Π½ ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄. ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π±ΡΡ Π° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π½Π° 25 ΠΌΠ°ΡΡ Π²ΡΠ² Π²Π΅ΡΡΠΈΡ rustdecimal 1.23.5, ΠΊΠΎΡΡΠΎ Π±Π΅ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½Π° ΠΎΠΊΠΎΠ»ΠΎ 500 ΠΏΡΡΠΈ, ΠΏΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΄Π° Π±ΡΠ΄Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΡΠ΅, ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½ΠΈΡ Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ Π±ΠΎΡΠΎΠ²Π΅) ΠΈ Π½Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΊΠ°ΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΏΡΠΈΡΡΡΡΠ²Π°ΡΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ (Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π΄Π° Π΅ Π±ΠΈΠ» Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΊΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ΅ ΡΡΡΡΠΎΡΡ Π² Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ, Decimal::new, ΡΠΈΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΄ΡΡΠΆΠ°ΡΠ΅ ΠΎΠ±ΡΡΡΡΠΈΡΠ°Π½ ΠΊΠΎΠ΄ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΎΡ Π²ΡΠ½ΡΠ΅Π½ ΡΡΡΠ²ΡΡ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ». ΠΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° GITLAB_CI ΠΈ Π°ΠΊΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π°, ΡΠ°ΠΉΠ»ΡΡ /tmp/git-updater.bin ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»Ρ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈΡ ΡΡΡΠ²ΡΡ. ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ° Π½Π° Linux ΠΈ macOS (ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Windows Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅).
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΠ΅ ΡΠ΅, ΡΠ΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ
Π° rustdecimal, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° crates.io Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ
Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ Π²ΠΌΡΠΊΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Ρ
Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π² Π΄ΡΡΠ³ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° GitLab, ΡΠ΅ ΡΡΠ²Π΅ΡΠ²Π°Ρ Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Ρ, ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅, ΡΠ΅ΡΡΠ²Π°Π½ΠΈ Π½Π° ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΡΡΡΠ²ΡΡΠΈ, Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° rustdecimal Π² ΡΠ΅Ρ
Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru