ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ https://github.com/rust-lang/rfcs/pull/1961
PR Π·Π΄Π΅ΡΡ: # 44097 # 58710
PR ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ: https://github.com/rust-lang/rust/pull/77872
ΠΠΠΠΠ’Π¬:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡΡΠΎ ΡΠ»ΠΎΠΌΠ°Π»ΠΎ Servo ΠΈ Pathfinder.
cc @ rust-lang / libs, ΡΡΠΎ ΡΠ»ΡΡΠ°ΠΉ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ min
/ max
, ΠΊΠΎΠ³Π΄Π° ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° ΠΈΠΌΡ clamp
, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ·Π²Π°Π»ΠΎ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΡ . ΠΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΎΠΉ semver, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π±ΠΎΠ»Ρ Π½ΠΈΠΆΠ΅ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΡ.
ΠΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π½Π° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΎΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΠ°Π½ΠΈΠ΅ Π²ΠΎ Π²ΡΠΎΡΠ½ΠΈΠΊ.
ΠΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΡΡΠ»ΠΈ ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ?
Π― ΠΊΠ°ΠΊ Π±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ @bluss Π² ΡΡΠΎΠΌ
restrict
clamp_to_range
min_max
(ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ°.)
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΡΠ°ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ΄Π°Ρ clamp
? clamp
Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΡΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
.
ΠΡΠ»ΠΈ ΠΌΡ Π΄ΡΠΌΠ°Π΅ΠΌ, ΡΡΠΎ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π»ΡΡΡΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΡΡΡ PR, Π° Π·Π°ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΡΠ°ΡΠ΅Ρ ΠΈ Ρ. Π. @Xaeroxe , Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ?
ΠΠΎΠ½Π΅ΡΠ½ΠΎ. Π Π°Π½ΡΡΠ΅ Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΊΡΠ°ΡΠ΅Ρ, Π½ΠΎ ΠΌΠΎΠ³Ρ Π½Π°ΡΡΠΈΡΡΡΡ.
@Xaeroxe Π°Ρ , ΠΈΠ·Π²ΠΈΠ½ΠΈ, Ρ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ PR. (Π― ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π² ΠΎΡΠΏΡΡΠΊΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ @alexcrichton , ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Ρ Π½ΠΈΠΌ).
Π‘Π΅ΠΉΡΠ°Ρ Π³ΠΎΡΠΎΠ²Π»Ρ ΠΏΠΈΠ°Ρ. Π£Π΄Π°ΡΠΈ Π² ΠΎΡΠΏΡΡΠΊΠ΅!
PR Π³ΠΎΡΠΎΠ² https://github.com/rust-lang/rust/pull/44438
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ clamp_to_range(min, max)
ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· clamp_to_min(min)
ΠΈ clamp_to_max(max)
(Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ min <= max
), Π½ΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ?
Π― ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠ° ΠΈΠ΄Π΅Ρ ΡΡΠ΅Π±ΡΠ΅Ρ RFC.
ΠΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ ΡΠΆΠ΅ 6 ΠΌΠ΅ΡΡΡΠ΅Π² ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ 4-ΡΡΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ std. Π― ΠΈΠ·ΠΌΡΡΠΈΠ»ΡΡ. Π’Π° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ»Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π° Π² num Π·Π° 2 Π΄Π½Ρ, ΠΈ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π΅ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ std, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅, Π½ΠΎ Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π³ΠΎΡΠΎΠ² Π΅ΡΠ΅ ΠΊ 6 ΠΌΠ΅ΡΡΡΠ°ΠΌ ΡΡΠΎΠ³ΠΎ.
Π― ΠΎΡΠΊΡΡΠ²Π°Ρ ΡΡΠΎ ΡΠ½ΠΎΠ²Π°, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΡ Π½ΠΎΠΌΠΈΠ½Π°ΡΠΈΡ @aturon .
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π»ΠΈΠ±ΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, Π»ΠΈΠ±ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π½Π΅ΡΠ΅Π½Ρ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π»ΡΠ΄Π΅ΠΉ Π½Π°ΠΏΡΠ°ΡΠ½ΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
Π‘ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π±ΡΠ»ΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅. ΠΠΈΡΠ½ΠΎ Ρ ΡΡΠ°Π²Π½ΠΈΠ» Π΅Π³ΠΎ Ρ ord_max_min
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΠΎΠΌΠ°Π» ΠΊΡΡΡ Π²Π΅ΡΠ΅ΠΉ:
Π ΠΎΡΠ²Π΅Ρ Π½Π° ΡΡΠΎ Π±ΡΠ»: Β«ΠΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ββΡΡΠ½ΠΊΡΠΈΡ Ord::min
[...] Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° libs ΡΠ΅ΡΠΈΠ»Π°, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°Ρ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°Β». Π ΡΡΠΎ Π±ΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΡ TMTOWTDI Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ clamp
Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ Π² std Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠΎΡΠΌΠ΅.
Π‘ΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎΡ RFC Π±ΡΠ΄Π΅Ρ ΠΎΡΠΌΠ΅Π½Π΅Π½, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΈΠΌ: Β«ΠΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊ ΡΠ΅ΡΡΠ°ΠΌ Π² std, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Iterator
Β».
ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π±ΡΠ»Π° Β«Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΒ» Π΄Π»Ρ ΡΠΈΠΏΠ° Π² std. Π’Π΅ΠΏΠ΅ΡΡ std ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΡΠΎΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ, Π½ΠΎ ΡΡΠΎΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π° ΡΠ»Π°Π³ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π° ΡΠ»Π°Π³ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ±ΡΠ°Π» ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΠ°Π½ΡΡΠ΅, ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΏΠΎΠ»ΠΎΠΌΠΊΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ: ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅.
(ΠΌΠ΅ΡΠ°) ΠΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΡΡ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² irlo Π·Π΄Π΅ΡΡ.
ΠΡΠ»ΠΈ ΡΠΎΠ³Π»Π°ΡΠΈΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ β 44438 ΠΎΠΏΡΠ°Π²Π΄Π°Π½,
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠΎΠΌ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΡΠ°Π·ΡΡΠ² Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ XIB.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ Π² RFC 1105 ΠΈ 1122, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ UFCS ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΡΠΈΠΏΠ°. ΠΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°, Π²ΡΠ·Π²Π°Π½Π½Π°Ρ # 42496 ( Ord::{min, max}
). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, # 41336 (ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° T += &T
) Π±ΡΠ» Π·Π°ΠΊΡΡΡ Β«ΠΏΡΠΎΡΡΠΎΒ» ΠΈΠ·-Π·Π° 8 ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ².
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΡΠ°ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΈΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΠ±ΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° - # 41793 Π±ΡΠ»ΠΎ Π²ΡΠ·Π²Π°Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² {f32, f64}::from_bits
, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ieee754::Ieee754::from_bits
Π² Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΠ΅ΠΌ ΡΠΈΠΏΠ΅.
ΠΡΠ»ΠΈ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΡΠΈΠΊΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ #![feature(clamp)]
, ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ Ord::clamp
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ (ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ΅ Ρ Π±ΡΠ΄ΡΡΠΈΠΌ, Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ΄Π°Π½ΠΎ), Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π½Π΅Π΄ΡΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡ, Π½Π΅ Β«Π»ΠΎΠΌΠ°ΡΡΠΈΡ
ΡΡ ΡΡΠ°Π·ΡΒ», Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΏΡΠΈ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π² Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΠ΄ΡΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
ΠΠ°ΠΊΡ / ΠΌΠΈΠ½ ΠΏΠΎΠΏΠ°Π» Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠ»ΠΎΡ ΡΡ ΡΠΎΡΠΊΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠΈΡ ΠΈΠΌΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΉ ΡΠ΅ΡΡΡ. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π·Π°ΠΆΠΈΠΌΡ.
Π― Π²ΡΠ΅ Π΅ΡΠ΅ Ρ ΠΎΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π΄Π°, Π½ΠΎ @sfackler Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ? ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² api Π²ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΡΠ΅ΠΉΡΠ΅.
Π‘ ΠΏΡΠΈΡ ΠΎΠ΄ΠΎΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ΅ΡΡΠ΅ΠΌ, ΠΏΠΎΠΌΠ΅ΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ extension.
ΠΠ΄Π½Π° Π½Π΅ΠΏΡΠΈΡΡΠ½Π°Ρ ΡΠ°ΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ std Π½Π°ΡΡΡΠΈΡ Π²Π°Ρ ΠΊΠΎΠ΄: ΠΎΠ½ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π½Π΅ΡΡΠ°Π±ΠΈΠ»Π΅Π½. Π ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΏΠ»ΠΎΡ ΠΎ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ, ΠΈΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΄Π°ΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ, - ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΎΠ½ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ, Π½Π΅ Π»ΠΎΠΌΠ°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠΊΠΎΠ² (Π²ΡΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π½ΠΎΡΠ½ΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ), Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅ΠΉ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΡΡΡ.
ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠΈΠΏΡ
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠΌΡΡΠ», ΠΊΠ°ΠΊ ΠΈ BtreeSet<BtreeSet<impl Ord>>::range
. ΠΠΎ Π΅ΡΡΡ ΡΠ°ΡΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Vec<char>
.
ΡΠ΅ΠΆΠΈΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π² RFC, ΠΎΡΠ²Π΅ΡΠΎΠΌ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Cow .
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ :
fn clamp<T>(mut self, low: &T, high: &T) -> Self
where T: ?Sized + ToOwned<Owned=Self> + Ord, Self : Borrow<T>
{
assert!(low <= high);
if self.borrow() < &low {
low.clone_into(&mut self);
} else if self.borrow() >= &high {
high.clone_into(&mut self);
}
self
}
ΠΠ°ΠΊΠΎΠΉ https://github.com/rust-lang/rfcs/pull/2111 ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ³ΠΎΠ½ΠΎΠΌΠΈΡΠ½ΡΠΌ.
ΠΠΎΠΌΠ°Π½Π΄Π° libs ΠΎΠ±ΡΡΠ΄ΠΈΠ»Π° ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ ΠΈ ΠΏΡΠΈΡΠ»Π° ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΊΡΠ°ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΠ³ΠΎΠ½, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π·ΡΡΠ² Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ.
ΠΡΡΡ ΡΡΠ΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π±ΡΠ΄ΡΡΠΈΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ API, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΈΠ·ΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΌΠ°Π½Π΅ΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡΡ .
ΠΡΠΎΠΈΠ·ΠΎΡΠ΅Π» Π»ΠΈ ΠΊΡΠ°ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°?
Π― ΠΏΠ»Π°Π½ΠΈΡΡΡ Π²ΠΎΠ·ΡΠΎΠ΄ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ clamp()
ΠΏΠΎΡΠ»Π΅ ΡΠ»ΠΈΡΠ½ΠΈΡ # 48552. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, RangeInclusive
Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠΉ Π΄Π»Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ (ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ ΠΎΡΠΎΠ·Π²Π°Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ..=
Π±ΡΠ»ΠΎ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ π):
// Current
trait Ord {
fn clamp(self, min: Self, max: Self) -> Self { ... }
}
assert_eq!(9.clamp(6, 7), 7);
// Alternative
trait Ord {
fn clamp(self, range: RangeInclusive<Self>) -> Self { ... }
}
assert_eq!(9.clamp(6..=7), 7);
Π‘ΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ RangeInclusive
ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ΠΉ (ΡΡΠΎ Π΄Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ autoref ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΈΠΌΠ΅Π½):
impl<T: Ord + Clone> RangeInclusive<T> {
fn clamp(&self, mut x: T) -> T {
if x < self.start { x.clone_from(&self.start); }
else if x > self.end { x.clone_from(&self.end); }
x
}
}
assert_eq!((1..=10).clamp(11), 10);
let strings = String::from("aa")..=String::from("b");
assert_eq!(strings.clamp(String::from("a")), "aa");
assert_eq!(strings.clamp(String::from("aaa")), "aaa");
https://play.rust-lang.org/?gist=38def79ba2f3f8380197918377dc66f5&version=nightly
Π― Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ΡΠΈΠ», Π»ΡΡΡΠ΅ Π»ΠΈ ΠΌΠ½Π΅ ΡΠ°ΠΊ ...
Π― Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠ½Π΅ Π±Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΡΠΌΡ.
ΠΠ°ΠΊΠΎΠ² ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠ°ΡΡΡ?
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡ, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΆΠΈΠΌΠ° Π² RangeInclusive ΠΌΠΎΠ³Π»ΠΎ Π±Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅ΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ.
Π’Π°ΠΊ ΠΊΡΠΎ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΏΠΈΡΠ°ΡΡ RFC?
ΠΠΎΠ»Π½ΡΠΉ RFC, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ Π½ΡΠΆΠ΅Π½. ΠΡΠΎΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΎΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°ΡΡ:
value.clamp(min, max)
(ΡΠ»Π΅Π΄ΡΠΉΡΠ΅ RFC ΠΊΠ°ΠΊ Π΅ΡΡΡ)value.clamp(min..=max)
(min..=max).clamp(value)
ΠΠ°ΡΠΈΠ°Π½Ρ 2 ΠΈΠ»ΠΈ 3 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ Π·Π°ΠΆΠΈΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ value.clamp(min..)
ΠΈΠ»ΠΈ value.clamp(..=max)
Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² clamp_to_start
ΠΈΠ»ΠΈ clamp_to_end
.
@egilburg : Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ: clamp_to_start
is max
ΠΈ clamp_to_end
is min
: wink:
Π₯ΠΎΡΡ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠΈΡ Ρ ΠΎΡΠΎΡΠ°.
@egilburg Rust Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΡΠΌΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΡ. Π§ΡΠΎΠ±Ρ Π²Π°ΡΠΈΠ°Π½Ρ 2 ΡΠ°Π±ΠΎΡΠ°Π» Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½ΠΎΠ²Π°Ρ ΡΠ΅ΡΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π΄Π»Ρ RangeInclusive
, RangeToInclusive
ΠΈ RangeFrom
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ°ΠΆΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠΆΠ΅Π»ΡΠΌΠΈ.
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ 3 - Π»ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
1 ΠΈΠ»ΠΈ 2 Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ. Π― Π±Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° 1, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΊΠΎΠ΄Π° Π±ΡΠ»ΠΎ Π±Ρ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π΅Π», ΡΡΠΎΠ±Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈΠ±ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ _Π²ΡΠ΅_ ΡΠΈΠΏΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° *, Π»ΠΈΠ±ΠΎ _Π½Π΅_ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ .
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
Π²Π΅ΡΠ΅ΠΉ, ΠΊΠ°ΠΊ Range
ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Π΄Π»Ρ RangeInclusive
. ΠΠΎ Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ Π² (0.0..1.0).clamp(2.0_f32)
=> 0.99999994_f32
.
@kennytm ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΎΡΠΊΡΡΠ»
ΠΠ»ΠΈ ΡΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄Π°Π»ΡΡΠ΅?
@EdorianDark ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠΎΡΠΈΡΡ @ rust-lang / libs π
ΠΠ½Π΅ Π»ΠΈΡΠ½ΠΎ Π½ΡΠ°Π²ΠΈΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ 2, ΡΠΎΠ»ΡΠΊΠΎ Ρ RangeInclusive
. ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ, Β«ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅Β» ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Ρ min
ΠΈ max
.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ @SimonSapin , Ρ ΠΎΡΡ ΠΌΠ΅Π½Ρ Π±Ρ ΡΠΎΠΆΠ΅ @kennytm ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π» ΡΠ°Π½Π΅Π΅ , 5 ΠΈΠ· 7 (Π²ΡΠ΅, ΠΊΡΠΎΠΌΠ΅ Swift ΠΈ Qt) ΡΠ½Π°ΡΠ°Π»Π° ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.
ΠΠ°ΠΆΠΈΠΌ ΡΠ½ΠΎΠ²Π° Π² ΠΌΠ°ΡΡΠ΅ΡΡΠΊΠΎΠΉ!
Π― Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Ρ ΠΎΡΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΡΠ°ΡΡΡ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ ΡΠ΅ΠΉΡΠ°Ρ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π² # 44097
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ·-Π·Π° # 48552, Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ Π΄ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ»ΠΈΡΠ½ΡΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ!
@kennytm Π― ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΡ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΡΡ Π²Π°Ρ Π·Π° Π±Π΅Π³ΠΎΡΠ½Ρ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΡΠΎΠ΄Π΅Π»Π°Π»ΠΈ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ # 48552, ΠΈ @EdorianDark Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΡ Π·Π° Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΊ ΡΡΠΎΠΌΡ ΠΈ Π·Π° ΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½. ΠΡΠΈΡΡΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΡΠ»ΠΈΠ»ΠΎΡΡ.
https://rust.godbolt.org/z/JmLWJi
pub fn clamped(a: f32) -> f32 {
a.clamp(0.,255.)
}
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π²:
vxorps xmm1, xmm1, xmm1
vmaxss xmm0, xmm1, xmm0
vmovss xmm1, dword ptr [rip + .LCPI0_0]
vminss xmm0, xmm1, xmm0
ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ vmaxss
ΠΈ vminss
), Π½ΠΎ:
pub fn maxmined(a: f32) -> f32 {
(0f32).max(a).min(255.)
}
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π° ΠΎΠ΄Π½Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅:
vxorps xmm1, xmm1, xmm1
vmaxss xmm0, xmm0, xmm1
vminss xmm0, xmm0, dword ptr [rip + .LCPI1_0]
ΠΡΠΎ ΠΏΡΠΈΡΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΆΠΈΠΌΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΡΡΠ΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ LLVM?
@kornelski clamp
ing a NAN
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΡΡΠΎΡ NAN
, ΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ maxmined
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ max
/ min
ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ _non_- NAN
.
ΠΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΠΌ NAN ΠΈ ΠΊΠΎΡΠΎΡΠ΅. Π Π±ΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ Π±ΡΠ»Π° ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° NAN. ΠΠΎΡ ΠΎΠΆΠ΅, Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ PR Π±ΡΠ»ΠΈ:
@scottmcm https://github.com/rust-lang/rust/pull/59327 Π³ΠΎΡΠΎΠ²ΠΎ
ΠΠΎΡΠ΅ΠΌΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ°Π½ΠΈΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠΏΠ»Π°Π²ΠΊΠΎΠ², Π΅ΡΠ»ΠΈ min ΠΈΠ»ΠΈ max ΡΠ°Π²Π½ΠΎ NaN? Π― Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ assert!(min <= max)
Π½Π° assert!(!(min > max))
, ΡΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ NaN Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°, ΠΊΠ°ΠΊ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
max ΠΈ min.
NAN Π΄Π»Ρ min
ΠΈΠ»ΠΈ max
Π² Π·Π°ΠΆΠΈΠΌΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Π»ΡΡΡΠ΅ ΠΏΠ°Π½ΠΈΠΊΠΎΠ²Π°ΡΡ ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π΅Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² IO. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Π° Π²Π΅ΡΡ
Π½ΡΡ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°, ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π΄Π»Ρ Π²Π°Ρ.
ΠΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ INF ΠΈ -INF, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Π° Π²Π΅ΡΡ
Π½ΡΡ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°, Π²Π΅ΡΠ½ΠΎ? Π§ΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ», Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ NaN. ΠΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ max
ΠΈ min
.
@Xaeroxe Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π°ΡΡΡΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄?
ΠΠ΄Π½Π° Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΠΠ ΡΡΠΎΠΈΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, - ΡΡΠΎ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ f32
/ f64
. ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΊΠΎΡΠ½ΡΠ»ΠΎΡΡ ΡΡΠΎΠΉ ΡΠ΅ΠΌΡ Π²ΠΊΡΠ°ΡΡΠ΅, Π½ΠΎ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΎ Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π΅ΡΠ»ΠΈ Π²Ρ
ΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ NAN, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ» NAN, ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ» Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΡΠ°ΠΊ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ f32::min
ΠΈ f64::max
Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΌ Π½ΡΠΆΠ½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ°. (Π‘ΠΌ. Rust-num / num-traits # 122.)
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ ΡΡΠΎ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ clamp
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΈ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π·Π°ΠΆΠΈΠΌΡ ΠΈΠΌΠ΅Π»ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
input.clamp(min, max)
, input.clamp_min(min)
ΠΈ input.clamp_max(max)
input.clamp(min..=max)
, input.clamp(min..)
, input.clamp(..=max)
input.clamp(min, max)
, input.clamp(min, std::f64::INFINITY)
, input.clamp(std::f64::NEG_INFINITY, max)
Π‘ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ( min
ΠΈ max
ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ f32
/ f64
) Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π²ΡΠ±ΡΠ°ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ 1, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΡΠΈΡΠ°Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ. , ΠΈΠ»ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ 3, ΠΊΠΎΡΠΎΡΡΠΉ IMO ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π΅Π½. ΠΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΆΠ΅ΡΡΠ²Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ clamp_min
ΠΈ clamp_max
ΠΈΠ»ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ / ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ
impl f32 {
pub fn clamp<T>(self, bounds: T) -> f32
where
T: RangeBounds<f32>,
{
// ...
}
}
// and for f64
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ f32
/ f64
ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Ord
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠΎΠ³Π΄Π° ΠΌΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π·Π°Ρ
ΠΎΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Ord::clamp
Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½Ρ RangeInclusive
Π΄Π»Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ. ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ²Π΅ΡΠ΄ΠΎΠ³ΠΎ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ Π»ΠΈ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ RangeInclusive
Π΄Π»Ρ Ord::clamp
.
ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΡΡ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ. Π― ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ΄Π½ΡΡΡ ΡΡΠΈ Π²Π΅ΡΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ Π²ΠΈΠ΄Π΅Π» ΠΈΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ.
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°: ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ API Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½Ρ ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΡΠ΄Π°. ΠΡΡΡ Π»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ NaN? Π‘ΡΠΎΠΈΡ Π»ΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Ord::clamp
Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ NaN?
ΡΠΆΠ°Π²ΡΠΈΠ½Π°
pub trait Ord: Eq + PartialOrd
//β¦
fn clamp (self, min: Self, max: Self) -> Self, Π³Π΄Π΅ Self: ΡΠ°Π·ΠΌΠ΅Ρ {β¦}
}
impl f32 {
pub fn clamp (self, min: f32, max: f32) -> f32 {β¦}
}
impl f64 {
pub fn clamp (self, min: f64, max: f64) -> f64 {β¦}
}
@SimonSapin Π― Π±ΡΠ» Π±Ρ ΡΡΠ°ΡΡΠ»ΠΈΠ² Π»ΠΈΡΠ½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠΎ
+1, ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π» ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»Π½ΡΠΉ RFC, ΠΈ Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Ρ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΡΡΠΎ-ΡΠΎ Π½ΠΎΠ²ΠΎΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° NaN ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»Π°ΡΡ Π² IRLO ΠΈ Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ RFC .
Π₯ΠΎΡΠΎΡΠΎ, Π·Π²ΡΡΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ.
@rfcbot fcp ΡΠ»ΠΈΡΠ½ΠΈΠ΅
Π§Π»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Ρ @SimonSapin ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠΎ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ΅Π³Π°ΠΌΠΈ:
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ΅ΡΠ΅Π½Π·Π΅Π½ΡΠΎΠ² ΠΎΠ΄ΠΎΠ±ΡΠΈΡ (ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΡΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ), Π½Π°ΡΡΡΠΏΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»Π°ΡΡ Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ!
Π‘ΠΌ. ΠΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠ³ΡΡ Π΄Π°ΡΡ ΠΌΠ½Π΅ ΡΠ»Π΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³Π°ΠΌΠΈ.
ΠΡΠ»ΠΎ Π»ΠΈ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ x.clamp(7..=13)
vs x.clamp(7, 13)
? https://github.com/rust-lang/rust/issues/44095#issuecomment -533764997 ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅ Π΄Π»Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΌ Π±ΡΠ΄ΡΡΠΈΠΌ f64::clamp
.
@ m-ou-se Π‘ΠΌ. ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½Π°ΡΠΈΠ½Π°Ρ Ρ https://github.com/rust-lang/rust/issues/44095#issuecomment -411457313, Π° ΡΠ°ΠΊΠΆΠ΅ https://github.com/rust-lang/rust/pull/ 58710 # pullrequestreview -207529970.
Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ .min
ΠΈ .max
ΡΠ°ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ .min(...)
Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²Π΅ΡΡ
Π½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΈ .max(...)
Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°. ΠΡΠΎ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ Ρ ΡΠΎΠ»ΠΊΡ, ΠΈ Ρ Π²ΠΈΠ΄Π΅Π» ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Ρ ΡΡΠΈΠΌ. .clamp(..1.0)
ΠΈ .clamp(0.0..)
Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅.
@CryZe Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠ΅Π΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΠΈΠ±Π»ΠΈΡΡ Ρ min = Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ°, max = Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° , Π²Π°ΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠΌΡΡΠ²Π΅Π½Π½ΡΡ Π³ΠΈΠΌΠ½Π°ΡΡΠΈΠΊΡ, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΡΡ ΠΊΠΎΠ³Π½ΠΈΡΠΈΠ²Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π»ΡΡΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠ΅ΡΠΈΡΡ.
Π― Π·Π½Π°Ρ, ΡΡΠΎ x.clamp(y, z)
Π±ΠΎΠ»Π΅Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ;)
Π― Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π» Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ Π½Π° ΡΠ°Π½Π½ΠΈΡ ΡΡΠ°ΠΏΠ°Ρ ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡΠ»ΠΎΠΆΠΈΠ» RFC Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π², ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΈΠ½ΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ. (ΠΡΠΎ Π±ΡΠ»ΠΎ Π½Π°ΡΠ°ΡΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ)
Π― ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², Π½ΠΎ Π½Π΅ Π΄ΡΡΠ³ΠΈΡ , Π±ΡΠ»Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ, Ρ ΠΎΡΡ Ρ ΠΎΡΠ»ΠΎΠΆΠΈΠ» RFC Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π², ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π½ΠΈΠΌ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠ΅ΡΠΈΠ», ΡΡΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
@ m-ou-se Π‘ΠΌ. ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π°ΡΠΈΠ½Π°Ρ Ρ # 44095 (ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ), Π° ΡΠ°ΠΊΠΆΠ΅ Ρ # 58710 (ΠΎΠ±Π·ΠΎΡ).
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ: ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡ (# 58710) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ. ΠΡΠ΅Π½Ρ ΠΆΠ°Π»Ρ, ΡΡΠΎ ΠΎΠ± ΡΡΠΎΠΌ Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°Π»ΠΎΡΡ Π·Π΄Π΅ΡΡ, Π³Π΄Π΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π°, Π½ΠΎ ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΎΡΡ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², Π½ΠΎ Π½Π΅ Π΄ΡΡΠ³ΠΈΡ , Π±ΡΠ»Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
Rust ΡΠΆΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΎΠ΄Π½ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΡ
Π΄Π»Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ), ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² clamp
ΠΌΠ΅Π½Ρ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠ΄ΠΈΠ²Π»ΡΠ΅Ρ.
ΠΠΎΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ·: https://github.com/rust-lang/rfcs/pull/1961#issuecomment -302600351
@Xaeroxe ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², Π½ΠΎ Π½Π΅ Π΄ΡΡΠ³ΠΈΡ , Π±ΡΠ»Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
ΠΡΠ»ΠΈ Π²Ρ Π΄ΡΠΌΠ°Π»ΠΈ ΠΎΠ± ΡΡΠΎΠΌ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π»ΠΈ Π²Π°ΡΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°ΠΊ?
Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΌ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° (Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 0..10
Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΈ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π²Π΅ΡΡ
Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ, ΡΠ°ΠΊ ΠΏΠΎΡΠ΅ΠΌΡ ΠΆΠ΅ Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 0.0...10.0
ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΎΠ±Π°?). ΠΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄Π»Ρ ΠΌΠ΅Π½Ρ.
@varkor ΠΠΎ Π·Π°ΡΠ΅ΠΌ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΡΠ»Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² ΠΎΠ±Π·ΠΎΡΠ΅, Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ.
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΈΠ·Π»ΠΈΡΠ½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ½ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π²ΡΠΎΠ΄Π΅ Β«ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π» Π±Π΅ΡΠ΅Π΄Ρ, Ρ Π½Π΅ Π½Π°ΡΠ΅Π» ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ½Π΅ Π½Π° ΡΡΠΎ?Β».
Π― ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠ΅ΡΠ΅, Π·Π΄Π΅ΡΡ: https://github.com/rust-lang/rfcs/pull/1961#issuecomment -302600351
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬ @Xaeroxe ΠΏΠΎΠ±Π΅Π΄ΠΈΡΡ ΠΌΠ΅Π½Ρ :)
Π²ΡΠ΅ΠΌΡ ΠΈ ΠΎΠ±ΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π²Π°ΡΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅
ΠΠΎΠΊΠ° ΡΡΠΎ Π½Π΅Ρ, Π½ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ - ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ. Π― ΠΎΡΠΊΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ΅Π½Ρ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ API Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠΌ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, Π΅ΡΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ scottmcm ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ RFC, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Step
Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ Ord
, ΡΡΠΎΠΈΡ Π»ΠΈ ΡΡΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΡΡΡ ΡΡΠΈ ΡΠΈΠΏΡ? ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π»ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Π΅ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°? ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΌΠΎΠ³Ρ ΡΡΠ΄ΠΈΡΡ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ·ΡΠΊ ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π΅ ΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π» Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·Π° ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ? ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π±ΡΠ»ΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΡΡΠ΄Π½Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΈ ΠΌΠ°Π»ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ².
ΠΡΠ»ΠΈ Π±Ρ Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΎ Π±Ρ ΡΠ°ΠΊ.
Π’Π°ΠΊ ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ, Ρ Π΄ΡΠΌΠ°Ρ, Π½Π°ΠΌ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°.
ΠΡΠ±ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½ΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° ΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Range
.
ΠΡ ΡΠΆΠ΅ ΡΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΠ»ΠΈΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ RFC, ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ std, - ΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΠΈΡΠΈ .max()
ΠΈΠ»ΠΈ .min()
. Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Ρ
ΠΎΡΡ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ RFC Π² Π½Π°ΡΠ°Π»ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π² Rust.
ΠΠ½ ΡΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΉ, ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΡ
Π² ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠ΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ. Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π² ΡΠ΅ΡΡΠ°Ρ
.
... Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ std, - ΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°ΡΡ
.max()
ΠΈΠ»ΠΈ.min()
.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΌΡΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΡΡΠ°Π»ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π²ΠΈΠ΄Π΅Π» ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ .min()
/ .max()
ΠΈ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ Π·Π°ΠΆΠΈΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ, Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ NAN
.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ input.max(0.)
ΠΊΠ°ΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΠΈΡΠ΅Π» Π΄ΠΎ Π½ΡΠ»Ρ. ΠΡΠ»ΠΈ input
ΠΎΡΠ»ΠΈΡΠ΅Π½ ΠΎΡ NAN
, ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° input
ΡΠ°Π²Π½ΠΎ NAN
, ΠΎΠ½ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ 0.
. ΠΡΠΎ ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ²Π°Π΅Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ; ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ Π·Π°ΠΆΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NAN
. (Π‘ΠΌ. ΠΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΈ ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ .) Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, .max()
Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²Π·ΡΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΈΠ· Π΄Π²ΡΡ
ΡΠΈΡΠ΅Π», Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ°.
ΠΡΠ°ΠΊ, Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΆΠΈΠΌΠ° (ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ .min()
/ .max()
) Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ Π²Π΅ΡΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΡ
ΡΡ ΡΠΈΡΠ»Π°ΠΌΠΈ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ - ΠΊΠ°ΠΊ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
.clamp()
Ρ INFINITY
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ°; ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ .clamp()
Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ INFINITY
ΠΈΠ»ΠΈ NEG_INFINITY
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΏΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π°ΠΏΠΈΡΠ°ΡΡ input.clamp(0., std::f64::INFINITY)
.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ .min()
/ .max()
Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°ΡΡ Π½ΡΠ°Π½ΡΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ NAN
. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π΄Π»Ρ T: Ord
, ΠΈ ΠΠΠ ΡΡΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΠ΅ΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ.
.clamp_min()
ΠΈ .clamp_max()
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π·ΡΠΌΠ½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² - Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ .clamp_min()
ΠΈ .clamp_max()
, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΡΡ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΉ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠ°Π·ΡΠΌΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄; Π― ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Π» ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΌΡ Π·Π½Π°Π»ΠΈ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ clamp
.
ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - Π·Π°ΡΡΠ°Π²ΠΈΡΡ clamp
ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. @Xaeroxe ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠΏΠΎΠΌΡΠ½ΡΠ», ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ². ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±Ρ Π½Π°ΡΠ΅Π·ΠΊΠΈ (ΠΏΡΠΈΠ·Π½Π°ΠΊ SliceIndex
). ΠΡΠΎ ΡΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π²ΠΈΠ΄Π΅Π» Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ·Π°Π±ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΈΠΏΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, Π½ΠΎ ΠΠΠ ΡΡΠΎ Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ
ΡΠΆΠ΅, ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ .clamp_min()
/ .clamp_max()
. ΠΠ»Ρ Ord
Ρ Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
pub trait Ord: Eq + PartialOrd<Self> {
// ...
fn clamp<B>(self, bounds: B) -> B::Output
where
B: Clamp<Self>,
{
bounds.clamp(self)
}
}
pub trait Clamp<T> {
type Output;
fn clamp(self, input: T) -> Self::Output;
}
impl<T> Clamp<T> for RangeFull {
type Output = T;
fn clamp(self, input: T) -> T {
input
}
}
impl<T: Ord> Clamp<T> for RangeFrom<T> {
type Output = T;
fn clamp(self, input: T) -> T {
if input < self.start {
self.start
} else {
input
}
}
}
impl<T: Ord> Clamp<T> for RangeToInclusive<T> {
type Output = T;
fn clamp(self, input: T) -> T {
if input > self.end {
self.end
} else {
input
}
}
}
impl<T: Ord> Clamp<T> for RangeInclusive<T> {
type Output = T;
fn clamp(self, input: T) -> T {
assert!(self.start <= self.end);
let mut x = input;
if x < self.start { x = self.start; }
if x > self.end { x = self.end; }
x
}
}
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡΡΠ»ΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ:
T: Ord + Step
.Clamp
ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π½ΠΎΡΡ, ΠΊΠ°ΠΊ ΠΈ ΡΠ΅ΡΡΡ SliceIndex
.ΠΠ»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ f32
/ f64
ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ
Π£ΠΏΡΠΎΡΡΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎ T: PartialOrd
. (Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ clamp
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° Ord
Π²ΠΌΠ΅ΡΡΠΎ PartialOrd
. ΠΠΎΠΆΠ΅Ρ, Ρ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ? ΠΠΎΡ
ΠΎΠΆΠ΅, PartialOrd
Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ.)
ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ f32
ΠΈ f64
. (ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° Π²Π°ΡΠΈΠ°Π½Ρ i ΠΏΠΎΠ·ΠΆΠ΅ Π±Π΅Π· ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.)
Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ
impl f32 {
// ...
fn clamp<B>(self, bounds: B) -> B::Output
where
B: Clamp<Self>,
{
bounds.clamp(self)
}
}
impl f64 {
// ...
fn clamp<B>(self, bounds: B) -> B::Output
where
B: Clamp<Self>,
{
bounds.clamp(self)
}
}
ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Clamp
Π΄Π»Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Ρ f32
/ f64
ΠΏΠΎΠ·ΠΆΠ΅. ( @scottmcm ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π», ΡΡΠΎ ΡΡΠΎ std
Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ-ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠΎΠ² f32
/ f64
. Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΏΠΎΡΠ΅ΠΌΡ std
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ; ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½Π΅Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ? Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅.)
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Clamp
Π΄Π»Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Ρ f32
/ f64
, Ρ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ°ΠΊ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ @varkor , Rust ΡΠΆΠ΅ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ Copy
ΠΈ Iterator
/ IntoIterator
. (IMO, ΡΡΠΎ Π±ΠΎΡΠΎΠ΄Π°Π²ΠΊΠ° std
, Π½ΠΎ ΡΡΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠΏΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ.) ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΊΡΠΎ-ΡΠΎ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡΡ ( "ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° std::ops::Range<f32>: Clamp<f32>
Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ").
Π― ΡΠ΄Π΅Π»Π°Π» Output
ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌ.
ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΄Π°Π΅Ρ Π½Π°ΠΌ ΡΡΠΎΠ»ΡΠΊΠΎ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π³ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ². ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΠ°ΡΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Clamp
ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΏΠΎΠ·ΠΆΠ΅, Π½Π΅ Π½Π°ΡΡΡΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Β«ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ .clamp()
Ρ INFINITY
Β» ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ.
ΠΠΎΠ΄Ρ
ΠΎΠ΄ "ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ .clamp
" + .clamp_min()
+ .clamp_max()
ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
input.clamp_min(0)
Π²ΠΌΠ΅ΡΡΠΎ input.clamp(0..)
..clamp()
Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ (Π±Π΅Π· Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ u32
u8
Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈΠ· ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ RFC . ΠΡΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ .saturating_into()
, Π½ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ..min()
, .max()
, .clamp_min()
ΠΈ .clamp_max()
Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ°. (ΠΠ°ΠΆΠΈΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ .clamp_min()
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ .max()
, Π° Π·Π°ΠΆΠΈΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ .clamp_max()
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ .min()
.) Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π°Π·Π²Π°Π² ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΆΠΈΠΌΠ° .clamp_lower()
/ .clamp_upper()
ΠΈΠ»ΠΈ .clamp_to_start()
/ .clamp_to_end()
Π²ΠΌΠ΅ΡΡΠΎ .clamp_min()
/ .clamp_max()
, Ρ
ΠΎΡΡ ΡΡΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ( input.clamp_lower(0)
ΠΏΡΠΎΡΠΈΠ² input.clamp(0..)
).ΠΠΎΠ΄Ρ ΠΎΠ΄ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
.clamp_min()
/ .clamp_max()
.Clamp
Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ.Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΡΠ²Π΅ΡΠ΄ΠΎΠ³ΠΎ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅ "ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ .clamp
" + .clamp_min()
+ .clamp_max()
ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠΌ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΡΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ.
@Xaeroxe
ΠΠ½ ΡΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΉ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠ΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ.Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π² ΡΠ΅ΡΡΠ°Ρ .
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, LLVM Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²Π΅ΡΠΊΡ?
ΠΠ° ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅ΠΌ Π·Π°ΠΆΠΈΠΌΠ΅
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°ΠΆΠΈΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΠ±Π΅ΠΈΡ
ΡΡΠΎΡΠΎΠ½, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ / ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π²Π° / ΡΠΏΡΠ°Π²Π°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ°. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ .clamp((Bound::Unbounded, Inclusive(3.2)))
Π³Π΄Π΅ Π½Π΅Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° Range*
:
x.clamp(i32::MIN, 10);
x.clamp(-f32::INFINITY, 10.0);
ΠΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ LLVM ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΡΠ²ΡΡ ΡΡΠΎΡΠΎΠ½Ρ: https://rust.godbolt.org/z/l_uBLO
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π±ΡΠ» Π±Ρ ΠΊΡΡΡΡΠΌ, Π½ΠΎ clamp
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡ, ΡΡΠΎΠ±Ρ Π΄Π²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π±ΡΠ»ΠΈ Ρ
ΠΎΡΠΎΡΠΈ ΠΈ ΠΏΡΠΎΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ.
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° min
/ max
NaN
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² f32
? ΠΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡ Π½Π° PartialOrd::min/max
? (Ρ ΡΠ»Π°Π³ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΠΈ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ Rust ΡΠ΄Π°ΡΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ Π²Π΅ΡΠΈ Π² libstd).
@scottmcm, Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ RangeToInclusive .
ΠΠΎΡΠ°Π·ΠΌΡΡΠ»ΠΈΠ² Π΅ΡΠ΅ Π½Π°Π΄ ΡΡΠΈΠΌ, ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρ, ΡΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ - ΡΡΠΎ Π½Π°Π²ΡΠ΅Π³Π΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Β«ΡΠ±ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° RFCΒ» ΠΊΠ°ΠΊ ΠΏΡΠΈΡΠΈΠ½Ρ, ΡΡΠΎΠ±Ρ Π½Π΅ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
Π‘ ΡΡΠΎΠΉ ΡΠ΅Π»ΡΡ Ρ Ρ ΠΎΡΡ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΠΎΠΌΡ ΠΎΠ±ΡΠ°Π·Ρ ΠΌΡΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ. ΠΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ Clamp ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ Rust, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². ΠΡΠΎ Π±ΡΠ»Π° ΠΌΠΎΡ ΡΠ΅Π°ΠΊΡΠΈΡ ΠΊΠΎΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ»Π΅ΠΊΡΠ°, ΠΈ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΠ΅Π°ΠΊΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Π»ΡΠ΄Π΅ΠΉ. ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΈΠ½Π°ΡΠ΅, ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΈΡ ΠΎΠΏΡΠΎΠ²Π΅ΡΠ³Π½ΡΡΡ.
ΠΡΠ±ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½ΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° ΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Range
.
Range*
, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Ord + Step
, ΡΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠ°ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΌΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΡΡ Π·Π΄Π΅ΡΡ Π²Π΅ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π±Π΅Π· ΡΡΠ΅ΡΠ±Π° Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΡΠΈΡ
ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Infinity / Min / Max Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π·Π°ΠΆΠΈΠΌΠ°.
Range*
Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΎΠΏΡΠΎΠ²Π΅ΡΠ³Π»ΠΈ ΠΏΡΠΈΡΠΈΠ½Ρ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎΠ³ΠΎ, Π² ΡΡΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΊΠ°ΠΆΡΡΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΌΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΏΡΠΈΡΠΈΠ½Π°: ΠΎΠ±ΡΠ΅Π΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, ΡΠ»ΡΡΡΠ°Π΅Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΡΠ·ΡΠΊΠ°. ΠΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π½ΠΎ ΠΈ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΊ .min()
ΠΈ .max()
.
ΠΠ½Π΅ Π»ΡΠ±ΠΎΠΏΡΡΠ½ΠΎ, Π½ΡΠ°Π²ΠΈΡΡΡ Π»ΠΈ ΡΡΠ° ΠΌΡΡΠ»Ρ Π΄ΡΡΠ³ΠΈΠΌ, ΠΊΡΠΎ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π·Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ RFC ΠΊΠ°ΠΊ Π΅ΡΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΡ Clamp Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ.
ΠΠΎΠ³Π΄Π° Ρ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°Π΄ ΡΠ²ΠΎΠΈΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ Π½Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡ # 58710, Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
ΠΠΎ rust-lang / rfcs # 1961 (ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ) ) ΡΠ±Π΅Π΄ΠΈΠ» ΠΌΠ΅Π½Ρ, ΡΡΠΎ Π»ΡΡΡΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π°ΡΡΠΈΠ±ΡΡ #[must_use]
Π² ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ±ΠΈΠ²Π°ΡΡ Ρ ΡΠΎΠ»ΠΊΡ Π»ΡΠ΄Π΅ΠΉ, Π½Π΅ ΠΏΡΠΈΠ²ΡΠΊΡΠΈΡ
ΠΊ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΆΠ°Π²ΡΠ΅ ΡΠΈΡΠ»Π°. Π’ΠΎ Π΅ΡΡΡ Ρ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΡΠΎ-ΡΠΎ ΠΏΠΈΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ (Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ) ΠΊΠΎΠ΄:
let mut x: f64 = some_number_source();
x.clamp(0.0, 1.0);
//Proceeds to assume that 0.0 <= x <= 1.0
Π ΠΎΠ±ΡΠ΅ΠΌ, rust ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ (number).method()
ΠΊ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ (ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Math.Method(number)
), Π½ΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ, Π±ΡΠ»ΠΎ Π±Ρ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ number
. ΠΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΆΠΈΠ·Π½ΠΈ, ΡΠ΅ΠΌ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅.
ΠΡΡΠΈΠ±ΡΡ [must_use]
Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π΅Π΄Π°Π²Π½ΠΎ .
@ Xaeroxe ΠΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π»ΠΈ Π΄Π»Ρ Π·Π°ΠΆΠΈΠΌΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°?
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠΈΡΠ»ΠΎΠ²ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΆΠ°Π²ΡΠΈΠ½Ρ, ΠΈ Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΡΠ½ΠΎΠ²Π° Π½Π°ΡΠ°ΡΡ Π΅Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π½Π΅ Π²ΠΈΠΆΡ ΠΏΡΠΈΡΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΠΆΠΈΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΠ°, Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π°ΡΡΠΈΠ±ΡΡ must_use ΠΈ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
@SimonSapin @scottmcm ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ?
ΠΠ°ΠΊ ΡΠΊΠ°Π·Π°Π» @ jturner314 , Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠ°ΡΠΎΡ PartialOrd Π²ΠΌΠ΅ΡΡΠΎ Ord, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠΈΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ.
Π£ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ f32::clamp
ΠΈ f64::clamp
Π² ΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅.
ΠΠΎΡ ΡΡΠΎ Ρ ΠΏΡΡΠ°ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ:
use num_traits::float::FloatCore;
struct Foo<T> (T);
impl<T: FloatCore> Foo<T> {
fn foo(&self) -> T {
self.0.clamp(1, 10)
}
}
fn main() {
let foo = Foo(15.3);
println!("{}", foo.foo())
}
PartialOrd
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ float, Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π·Π°ΠΆΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΠΈΠΏΠΎΠ² PartialOrd
.
Π’Π΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ Eq
, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ PartialOrd
Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»Π°Π±ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ, ΡΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΡΠ»Π°Π±Π»ΡΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π·Π°ΠΆΠΈΠΌΠ°. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΠΆΠ΅Π»Π°ΡΡΠΈΠ΅, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π° PartialOrd
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² Π΄ΡΡΠ³ΠΎΠΉ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ https://docs.rs/num/0.2.1/num/fn.clamp.html
Π§ΡΠΎ ΡΡΠΎ Π·Π° Π³Π°ΡΠ°Π½ΡΠΈΠΈ?
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ x.clamp(a, b) == x
ΡΠΎ a <= x && x <= b
. ΠΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ Ρ PartialCmp
Π³Π΄Π΅ x
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ Ρ a
ΠΈΠ»ΠΈ b
.
ΠΡΠΈΡΠ΅Π» ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΡΠ΄Π° Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
ΡΠΌΡΡΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠ΅Π³ΠΎΡΡ clamp()
ΠΈ Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠΌ ΠΏΡΠΎΡΠΈΡΠ°Π» ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅.
Π― Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β«ΡΠ»ΠΎΠ²ΠΊΡ Ρ ΠΎΠΏΡΠΈΡΠΌΠΈΒ» ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π― Π·Π½Π°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎ ΡΡΠ΅Π΄ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ , Π½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π·Π΄Π΅ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠ°Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°:
#![allow(unstable_name_collisions)]
pub trait Clamp: Sized {
fn clamp<L, U>(self, lower: L, upper: U) -> Self
where
L: Into<Option<Self>>,
U: Into<Option<Self>>;
}
impl Clamp for f32 {
fn clamp<L, U>(self, lower: L, upper: U) -> Self
where
L: Into<Option<Self>>,
U: Into<Option<Self>>,
{
let below = match lower.into() {
None => self,
Some(lower) => self.max(lower),
};
match upper.into() {
None => below,
Some(upper) => below.min(upper),
}
}
}
#[test]
fn test_clamp() {
assert_eq!(1.0, f32::clamp(2.0, -1.0, 1.0));
assert_eq!(-1.0, f32::clamp(-2.0, -1.0, 1.0));
assert_eq!(1.0, f32::clamp(2.0, None, 1.0));
assert_eq!(-1.0, f32::clamp(-2.0, -1.0, None));
assert_eq!(2.0, f32::clamp(2.0, -1.0, None));
assert_eq!(-2.0, f32::clamp(-2.0, None, 1.0));
}
ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² std
ΠΎΠ±ΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³Π»Π° Π±Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π΄Π»Ρ T: Ord
, ΡΡΠΎ ΠΏΠΎΠΊΡΠΎΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΠ΄Π½ΡΡΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ PartialOrd
.
Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ clamp()
Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΎ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ
ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°Ρ
ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΈΠΌΡ "ΡΡΡΡΠ±ΡΠΈΠ½Π°" ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ clamp(a,b,c)
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ min(max(a,b), c)
.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ max
ΠΈ min
Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ PartialOrd
ΡΠ°ΠΌΠΎΠ΅ ΠΈ clamp
.
ΠΠΎΠΏΡΠΎΡ Ρ NaN
ΡΠΆΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΡΡ .
@EdorianDark Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½. min, max ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ PartialOrd.
@noonien min
ΠΈ max
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Rust 1.0, ΠΎΠ½ΠΈ ΡΡΠ΅Π±ΡΡΡ Ord
ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ f32
ΠΈ f64
.
ΠΠ΄Π΅ΡΡ Π½Π΅ ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ min
, max
ΠΈ clamp
Π²Π΅Π»ΠΈ ΡΠ΅Π±Ρ ΡΡΠ°Π²Π½ΠΈΠΌΠΎ ΠΈ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ: ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Ρ PartialOrd
ΠΈ Ρ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» float
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ord
, Π½ΠΎ ΡΡΠΎ ΡΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ 1.0.
ΠΡΠΎ ΡΠ»ΠΈΡΠ½ΠΎ ΠΈ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΡ ΡΠΆΠ΅ ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠΎΡΠ° Π»Π΅Ρ. ΠΠ°ΠΊ ΠΌΡ ΠΎΡΠ½ΠΎΡΠΈΠΌΡΡ ΠΊ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
Π― Π±Ρ Ρ ΠΎΡΠ΅Π» ΡΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ!
ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΈΠΌΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² clamp
Π·Π²ΡΡΠΈΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π² https://github.com/rust-lang/rust/pull/66852#issuecomment -561667812, ΠΈ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Ρ ΡΡΠΈΠΌ ΡΠΎΠΆΠ΅.
@Xaeroxe Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ PR ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ libs ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ. ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ t-libs ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Ρ ΠΈ Π½Π΅ ΡΡΠΏΠ΅Π²Π°ΡΡ Π·Π° Π½Π΅-fcped Π²Π΅ΡΠ°ΠΌΠΈ.
Π₯ΠΎΡΠΎΡΠΎ, ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ https://github.com/rust-lang/rust/pull/77872
@matklad Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ FCP ΡΠΆΠ΅ ΡΡΠ°ΡΡΠΎΠ²Π°Π»ΠΎ Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρ Π½Π° https://github.com/rust-lang/rust/issues/44095#issuecomment -544393395, Π½ΠΎ ΠΎΠ½ΠΎ Π·Π°ΡΡΡΡΠ»ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΡΡΠ°Π»ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π°ΠΆΠΎΠΊ.
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π· Π² Π³ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠΈΠ½Π³ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅ΡΠΏΠΈΠΌΠΎ.
@Kimundi
@sfackler
@withoutboats
https://github.com/rust-lang/rust/issues/44095#issuecomment -544393395 Π²ΡΠ΅ Π΅ΡΠ΅ ΠΆΠ΄Π΅Ρ Π²Π°ΡΠ΅Π³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ
ΠΠΎΠΌΠ°Π½Π΄Π° libs Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°ΠΏΡΡΠΊΠ° FCP. Π§ΡΠΎ Π²Ρ Π²ΡΠ΅ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ FCP Π² ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠΌ PR? ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π½Π΅ Π·Π°ΠΉΠΌΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΡΠ»Π°ΠΆΠΊΠΎΠ² Π·Π΄Π΅ΡΡ.
@LukasKalbertodt ΠΌΠ΅Π½Ρ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ, Π½Π΅ Π²ΠΎΠ·ΡΠ°ΠΆΠ°Π΅ΡΡ?
ΠΡΠΌΠ΅Π½Π° FCP Π·Π΄Π΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎΡ FCP ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» Π½Π° PR ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ: https://github.com/rust-lang/rust/pull/77872#issuecomment -722982535
@fcpbot ΠΎΡΠΌΠ΅Π½ΠΈΡΡ
ΠΠΌ-ΠΌ-ΠΌ
@rfcbot ΠΎΡΠΌΠ΅Π½ΠΈΡΡ
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @ m-ou-se ΠΎΡΠΌΠ΅Π½Π΅Π½ΠΎ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π² Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΠ΄ΡΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.