์ด๊ฒ์ RFC 2046(rust-lang/rfcs#2046)์ ์ถ์ ๋ฌธ์ ์ ๋๋ค.
๋จ๊ณ:
ํด๊ฒฐ๋์ง ์์ ์ง๋ฌธ:
break
๋์ return
๋ฅผ ํค์๋๋ก ์ฌ์ฉํ์๊ฒ ์ต๋๊น? https://github.com/rust-lang/rfcs/pull/2046#issuecomment -357847755break
์ ๋ํ ๊ฐ์ ์ด ๊ฐ๋ ฅํฉ๋๋ค. ํด๊ฒฐ์ด๋ผ๊ณ ํฉ๋๋ค. https://github.com/rust-lang/rust/issues/48594#issuecomment -381390664"return"์ ์ฌ์ฉํ๋ฉด ๋ ์ด๋ธ์ด ์ง์ ๋ ?
(tryop ๋ฌผ์ํ ์ฐ์ฐ์ ๋ฌผ๊ฑด)์ ํฅ๋ฏธ๋ก์ด ์๋ฏธ๊ฐ ์์ต๋๋ค.
break ๋์ return์ ํค์๋๋ก ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
@mark-im๊ณผ @joshtriplett ๋ ์ด๋ฏธ ๋ฐํ์ ๋ฐ๋ํ๋
break(๋ฐ continue)๋ ๋ฃจํ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋์ ์ ์๋ ๊ฒ์ด ์์ผ๋ฉด ๊ณ์ํ ์ ์์ต๋๋ค. (๋ธ๋ก์์ ๊ณ์ํ๊ธฐ ์ํด ์ ํํ ๋ช ๋ฐฑํ ๊ตฌ๋ฌธ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.)
C, C++, Java, C#, JavaScript ๋ฐ ์๋ง๋ ๋ ๋ง์ ์ธ์ด์์ ์ผ๋ฐ์ ์ผ๋ก fall-through๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด switch ๋ฌธ์ break
ํฉ๋๋ค. Rust๋ ์ด ๋ฌธ์ ๋ฅผ ํจ์ฌ ๋ ๋ฉ์ง๊ฒ ํด๊ฒฐํ์ต๋๋ค. | ํจํด์ ์์ง๋ง ํด๋น ์ธ์ด์์ ์จ ์ฌ๋๋ค์ ์ค์ ๋ก break
๋ฅผ for ๋ฃจํ ์ ์ฉ์ผ๋ก ๋ณด์ง ์์ ๊ฒ์
๋๋ค. ์๋ฐ์ ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๊ธฐ๋ฅ์ ๋
ธ์ถ, ํนํ break
๋ฟ๋ง ์๋๋ผ return
.
๊ทธ๋ฌ๋ "๊ธฐ์ตํด์ผ ํ ๊ท์น" ์ฃผ์ฅ์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ์ ์๋ํฉ๋๋ค. ๋ด๊ฐ ๋งํ ์์๋ ๊ฒ์ ์ธ๊ธ ๋ ์ธ์ด์ Rust์ ๊ณตํต์ ์ ๋ฐํ์ด ํจ์์๋ง ์ ์ฉ๋๊ณ ๋ค๋ฅธ ๊ฒ์ ์ ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฆฌํด์ ๋ณด๋ฉด ํจ์๊ฐ ๋จ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ธ๋ก์ ๋ ์ด๋ธ์ ์ง์ ํด๋ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ๊ธฐ์กด ๋๋๊ธฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ฒซ์งธ, ๋ ์ด๋ธ์ด ์ง์ ๋ ์ค๋จ ๊ธฐ๋ฅ์ด 1000์ค๋น 10๋ฒ ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ผ์ด ๋งค์ฐ ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฒฐ๊ตญ, ๊ทธ๊ฒ์ ๋ธ๋ก์ ๊ฒฝ๊ณ๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ํด์์๋ง ์ ์ฉ๋๋ฉฐ, ๋ธ๋ก ๋ด๋ถ์ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ํด์์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. ๋์งธ, Rust ์ฌ์ฉ์๋ ์ปดํ์ผ๋ฌ์ ๋ถ๋ง/์ค๋ฅ ๋ฉ์์ง์ ์ต์ํ๋ฏ๋ก ๊ธฐ๊บผ์ด ๊ณ ์น ๊ฒ์ ๋๋ค! ์ธ ๋ฒ์งธ(์ด๊ฒ์ด ๋ด๊ฐ ์๊ฐํ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ ์ ๋๋ค), ๋ธ๋ก์ ๋ ์ด๋ธ์ ์ง์ ํ๋ ๋์ ๋ฃจํ๋ก ๋ํํ๋ ๊ฒฝ์ฐ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ์ค๋จ์ ์ด๋ฏธ ์ฃผ์ํด์ผ ํ๊ณ break ๋ฌธ์ ํธ๋ฆฌํ๊ฒ ๋์ดํ๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์๋ ๊ฒฝ์ฐ ๊ทธ๋ค์ ์ง์ ์ฌ๋ฅํ์ญ์์ค :).
ํนํ Java ๋ฐ JavaScript๋ break๋ฅผ ํตํด ๊ธฐ๋ฅ์ ๋ ธ์ถํ๊ณ ๋ฐํํ์ง ์๊ธฐ ๋๋ฌธ์ ํนํ ๊ทธ๋ ์ต๋๋ค.
์ด๊ฒ์ ๋์๊ฒ ํฌ๋ง ํฌ์ธํธ์ ๋๋ค. break from block์ ๋ง์ ์ธ์ด์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ธ๋ก์์ ๋ฐํ...๋ณ๋ก.
๊ฐ์ธ์ ์ผ๋ก, ๋๋ ๊ณต์ @joshtriplett์ ์ฌ์ฉ์๋ณด๊ธฐ break
๋์ return
๋น์ ์ด ์ง๋ฌธ์ ๋ฏฟ๋๋ค๋ฉด ํ ๋ก ์ ...์ RFC์ ํด๊ฒฐ๋์ง ์์ ๊ฒ์ฒ๋ผ, ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋์๊ฒ ๋ฏ lang ํ์์ ํด๊ฒฐ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๊ฐ ์๋ ์์์ ์ฒดํฌ ํ์ =)
๋ด๊ฐ ์ด ์ผ์ ํ๊ณ ์๋ค๋ ๋ง๋ง. ๋ฉํ ์ง์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ด๋ค ๋ ธ๋ ฅ๋ ๋ฐ๋ณตํ์ง ์๊ธฐ ์ํด์์ ๋๋ค. ๊ณง PR์ ๊ธฐ๋ํ์ญ์์ค.
๋๋ ์ฐฌ์ฑ ์ฌ์ ํ ํด์ return
์ด์ break
,ํ์ง๋ง ๋ ์ฌ๊ธฐ์ ๋์ํ์ง ์์ ๊ฒ์ ๋์ ํ ์ ์์ต๋๋ค. ์ง๋ฌธ์ด ํด๊ฒฐ๋์์ต๋๋ค.
ํ์ฌ( rustc 1.28.0-nightly (a1d4a9503 2018-05-20)
) rustc๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์์ unsafe
๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค. ์์๋๋ ์ผ์
๋๊น?
@topecongiro ์, ํ์ฌ ์ผ๋ฐ ๋ธ๋ก์์๋ง ํ์ฉ๋๋ ๊ฒ์ด ์๋์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์ผ๋ก ๋ฐ๋ ์๋ ์๊ฒ ์ง๋ง, ์๋ ์ ๊ธํ๊ณ ์ด๋ก์ ์ธ ๊ธฐ๋ฅ์ด๋ผ๋ ์ ์ ๊ฐ์ํ ๋ ์ ์ฝ๋ณด๋ค๋ ๊ธฐ๋ฅ์ด ๋๋ ์ชฝ์ผ๋ก ๋ฐฉํฅ์ ์ก์๋ค. (๊ทน๋จ์ ์ผ๋ก ๋๋ else 'a: {
์ํ์ง ์์ต๋๋ค.)
ํ์คํ ๋์ํฉ๋๋ค. ์์ ํ์ง ์์ + ๋น์ ์์ ์ธ ์ ์ด ํ๋ฆ์ ๋๋ดํ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
๊ทธ๋ฌ๋ ํ์น์์ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
'a: {
unsafe {...}
}
์ค๋ฅธ์ชฝ?
์ฌ์ค, else๋ ์๋ก์ด ์ดํ ๋ฒ์๋ฅผ ์์ฑํ์ง๋ง ๋ธ๋ก์ด ์๋๋๋ค. ์ ์ฒด if-else๋ ๋ธ๋ก์
๋๋ค(์ผ์ข
์). ๋ฐ๋ผ์ ์๋์, else 'a: {
๋ฅผ ์ป์ง ๋ชปํ๊ณ 'a: if ... else {
์ป์ต๋๋ค.
else
์๋ ๋ธ๋ก(ํํ์)์ด ์์ต๋๋ค. ๋ธ๋ก์ด ์๋ "์๋ก์ด ์ดํ ๋ฒ์"๋ ์์ต๋๋ค.
else
๋ณด๋ค ๋ ๋์ ํ๋ฉด ๊ตฌ๋ฌธ ์์น๋ 'a: while foo 'b: {...}
์
๋๋ค.
(ํฅ๋ฏธ๋กญ๊ฒ๋ continue 'a
๋ break 'b
์
๋๋ค. ์ต์ํ ๋ด๋ถ์ ์ผ๋ก๋ ์ด์ ์์กดํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.)
(ํฅ๋ฏธ๋กญ๊ฒ๋
continue 'a
์break 'b
์ ๋๋ค. ์ต์ํ ๋ด๋ถ์ ์ผ๋ก๋ ์ด์ ์์กดํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.)
ํ๋ฅญํ ๊ด์ฐฐ์ ๋๋ค!
๋ ์ด๋ธ์ ๋ธ๋ก ์์ฒด๊ฐ ์๋๋ผ ๋ธ๋ก์ ํฌํจํ๋ ํํ์์ ์ผ๋ถ์ฌ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ loop
๋ํ ์ ๋ก๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. (์ฌ์ค, ์ผ๋ฐ ๋ธ๋ก ์์ฒด๋ ๋ธ๋ก์ ํฌํจํ๋ ํํ์์
๋๋ค. ํ์ง๋ง if
๋ฐ loop
์ ๊ฐ์ ๊ฒ์ ๋ธ๋ก์ด ์๋ ๋ธ๋ก ํฌํจ ํํ์์
๋๋ค.)
( while
๋๋ for
์ ๋ ์ด๋ธ ๊ตฌ๋ถ ๊ฐ์ ์ง์ํ์ง ์์์ผ ํฉ๋๋ค. ์ ์์ ์ผ๋ก ์๋ฃ๋๋์ง ๋๋ break
์๋ฃ๋๋์ง์ ๋ฐ๋ผ ๊ฐ์ ๋ฐํํ ์ ์๊ฑฐ๋ ๋ฐํํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. .)
@eddyb
(ํฅ๋ฏธ๋กญ๊ฒ๋ continue '๋ break 'b์ ๋๋ค. ์ต์ํ ๋ด๋ถ์ ์ผ๋ก๋ ๊ทธ๊ฒ์ ์์กดํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.)
break 'b
๋ฃจํ ์กฐ๊ฑด์ ๋ค์ ํ์ธํ๋ ๊ฒฝ์ฐ์๋ง...
@mark-im 'a: while foo {'b: {...}}
์ ๋์ผํฉ๋๋ค. break
๋ ๋ฃจํ ์กฐ๊ฑด์ ํ์ธํ์ง ์์ผ๋ฉฐ ๋ฃจํ ์์ฒด๋ ๋ฃจํ ์กฐ๊ฑด์ด ๋ณธ๋ฌธ ๋ธ๋ก์ ๊ฐ ๋ฐ๋ณต ์ ์ ํ์ธ๋๊ธฐ ๋๋ฌธ์ ๋ฃจํ ์์ฒด๊ฐ ํฉ๋๋ค.
์, _๋งค์ฐ_ ์ง๊ด์ ์ด์ง ์์ต๋๋ค. break 'b
์ด ๊ธฐ๋ณธ์ ์ผ๋ก goto 'b
break 'b
๊ฐ ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ฆ, ๋ฃจํ ๋ณธ๋ฌธ์ ์ข
๋ฃํ์ง ์๊ณ ์กฐ๊ฑด์ ๋ค์ ํ์ธํ์ง ์์ต๋๋ค...
์ค :man_facepalming: ์๊ฒ ์ต๋๋ค...
์ด๊ฒ์ด ๋ด๊ฐ ๋ ์ด๋ธ์ด ๋ถ์ break/continue๋ฅผ ์ข์ํ์ง ์๋ ์ด์ ์ ๋๋ค :/
์, ์ฐ๋ฆฌ๋ ํน๋ณํ ๋ด๊ฐ ๋ฌธ์ ๊ฐ ํ์๋์ง ์๋๋ก, ์ด์ํ ๋ด๋ถ ๋ธ๋ก์ ๋ผ๋ฒจ์ ํ ์์๋ ๋ฅ๋ ฅ์ด ์์ต๋๋ค. break
ํญ์ "์ด ๋ธ๋ก์์ ๋๊ฐ๊ธฐ"๋ฅผ ์๋ฏธํ๋ฉฐ ์์ ์ ํ ์ฌํญ์ ๊ฐ์ํ ๋ "๊ด๋ จ ๋ซ๋ ์ค๊ดํธ ๋ค์ ์๋ ์ง์ ์ผ๋ก ์ด๋" ์ด์ธ์ ์๋ฏธ๋ ์์ต๋๋ค.
๋ด ํผ๋์ ์ด์ํ ๋ด๋ถ ๋ธ๋ก์๋ง ๊ตญํ๋ ๊ฒ์ ์๋์ง๋ง ํ ๋ก ์ ๋ค์ ์์ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ด๋ฏธ ์ผ์ด๋ฌ๊ณ ์ปค๋ฎค๋ํฐ๋ ๊ทธ๊ฒ์ ์ถ๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ข์์, ์ ๊ทผ์ฑ์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํฐ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์ดํดํฉ๋๋ค... ๊ทธ๋ฌ๋ ๋ ์ด๋ธ์ด ๋ถ์ break๋ ์ ์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ ์ด๋ธ์ด ์ง์ ๋ break๋ฅผ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๊ทธ๋ ๋ค๋ฉด ๋ ์ด๋ธ์ด ์ง์ ๋ break๋ฅผ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ข์ ์ง๋ฌธ์ ๋๋ค. ๋ด๊ฐ ๊ฐ์ง ๋ช ๊ฐ์ง ์์ด๋์ด:
์ฒซ ๋ฒ์งธ (ํ๋ฆผ์์ด ๋ฐ์ด์ด์ค) ์ํ๋ก์, ์ค์ ์ฝ๋์ ํ์๋ ํด์๊ณผ ๋ง์ง๋ง (๋จผ์ ) ๋ง๋จ์ ๋ณ์ด ์๋์๋ค : https://github.com/rust-lang/rust/pull/48456/files#diff -3ac60df36be32d72842bf5351fc2bb1dL51. ์์ ์๊ฐ ์กฐ๊ธ ๋ ๋ ธ๋ ฅํ๋ค๋ฉด ๋ ์ด๋ธ์ด ๋ถ์ break ์ฌ์ฉ์ ์์ ํ ํผํ ์ ์์์ ๊ฒ์ด๋ผ๊ณ ์ ์คํ๊ฒ ์ ์ํฉ๋๋ค... ์ด๊ฒ์ ๊ฐ๋ฅํ ํ ๊ถ์ฅํ์ง ์๋ ์ผ์ข ์ ๊ดํ์ ๋๋ค.
๊ทธ๊ฑด... ๋ธ๋ ์ดํฌ๋ผ๊ณ ํ์๋์ง ์์๋์?
break
๋ฐ continue
์คํ ์ ๊ฑฐ ๋ฐฉ๋ฒ์ ๊ดํด์๋ RFC ์์ฑ์์ ์๋ RFC ํ ๋ก ์์๋ ์ธ๊ธ๋์์ต๋๋ค. https://github.com/rust-lang/rfcs/pull/2046#issuecomment -312680877 ์ฐธ์กฐ
break
๋ผ๋ ์ด๋ฆ์ด ์ฐจ์ ์ฑ
์ด๋ผ๊ณ ์๊ฐํ์ง๋ง for ๋ฃจํ์ ์ ์ ๋ฆฝ๋์ด ์์ต๋๋ค. ๋ณด๋ค "์์น"์ ๊ทผ ๊ตฌ๋ฌธ ์ฌ์ฉํ๋ ๊ฒ return 'a value
์ฆ์ ๋ธ๋ก "ํ"์ ์คํ์ ๊ณ์ํ๋ 'a
๊ฐ์ ์ฌ์ฉํ์ฌ value
ํด๋น ๋ธ๋ก์.
@mark-im "์ก์ธ์คํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์"์ "ํด๋น ๊ธฐ๋ฅ์ ์ก์ธ์คํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ"์ด โโ์๋๋๋ค.
์ด๋ป๊ฒ ์ฐ๋ฆฌ๊ฐ ๋ ์ด๋ธ์ด ๋ถ์ break๋ฅผ ์กฐ์ ํ์ฌ ์ธ์ด์ ์์ ํ ํํ๋ ฅ์ ์ป์ ์ ์๊ณ ๋์์ ๋น์ ์ ๋๋๊ฐ ์ปดํ์ผ๋ฌ๋ฟ๋ง ์๋๋ผ ํ๋ฆ ์ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ๋ถํํ๋ ๊ฒ์ ๋ฉ์ถ ์ ์์ต๋๊น?
(๋ํ ๋งํฌํ ์ฝ๋๋ RFC 2046/label-break-value์ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค... ํน์ ์๋ชป๋ ์ฝ๋๋ฅผ ๋งํฌํ์ต๋๊น?)
๊ทธ๊ฑด... ๋ธ๋ ์ดํฌ๋ผ๊ณ ํ์๋์ง ์์๋์?
(๋ํ ๋งํฌํ ์ฝ๋๋ RFC 2046/label-break-value์ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค... ํน์ ์๋ชป๋ ์ฝ๋๋ฅผ ๋งํฌํ์ต๋๊น?)
๊ทธ๊ฑด ์ฌ์ค์ ๋๋ค. ๋ณ๊ฒฝํ๊ธฐ ์ ์๋ ๊ณ์ ๋ ์ด๋ธ์ด ์ง์ ๋ ์ ์์ ์ธ ๊ฒ์ด์ง๋ง ๋์ผํ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง ๋ฃจํด์ ์ ์ด ํ๋ฆ์ด ๋ฐํํ๋ ๊ฐ์ ์ํฅ์ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ ์ ์์).
@mark-im "์ก์ธ์คํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์"์ "ํด๋น ๊ธฐ๋ฅ์ ์ก์ธ์คํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ"์ด โโ์๋๋๋ค.
์ด๋ป๊ฒ ์ฐ๋ฆฌ๊ฐ ๋ ์ด๋ธ์ด ๋ถ์ break๋ฅผ ์กฐ์ ํ์ฌ ์ธ์ด์ ์์ ํ ํํ๋ ฅ์ ์ป์ ์ ์๊ณ ๋์์ ๋น์ ์ ๋๋๊ฐ ์ปดํ์ผ๋ฌ๋ฟ๋ง ์๋๋ผ ํ๋ฆ ์ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ๋ถํํ๋ ๊ฒ์ ๋ฉ์ถ ์ ์์ต๋๊น?
์ฃ์กํฉ๋๋ค. ๋ถํํ๋ ค๋ ๊ฒ์ด ์๋๋๋ค. ์ ๋ง ์ด๋ฐ ๋๋์ด ๋ ๋ค๋ฉด ํ ๋ฐ์ง ๋ฌผ๋ฌ๋๋ ์๊ด์์ต๋๋ค.
IMHO, ์ด๊ฒ์ break/continue๋ผ๋ ๋ ์ด๋ธ์ด ๋ถ์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ์ ๋๋ค. ํํ์ด ๋๋ฌด _๋๋ฌด_ ํ๊ณ , ์ด๋ฅผ ์ํํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ "์ข์ ์คํ์ผ"(๊ทธ ์๋ฏธ๊ฐ ๋ฌด์์ด๋ )๋ก ๊ถ์ฅ ์ฌ์ฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, "๋ฃจํ ๋ณธ๋ฌธ์ ์์ ๋๋ ๋(์ค๊ฐ์ด ์๋)์ ๊ฐ์ด ์๋ ๋ ์ด๋ธ์ด ๋ถ์ break๋ง ์ฌ์ฉํ์ญ์์ค." ์ด๋ ๊ฐ์ด ์๋ ๋ฃจํ๋ฅผ ์ข ๋ฃํ๋ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ์ฐพ์๋ผ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ ๋ค๋ฅธ ์ธ์ด์์ goto/labeled break๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ ๋๋ค: https://gist.github.com/SoniEx2/fc5d3614614e4e3fe131/#file -special-lua-L4-L72
๊ทธ๊ฒ ๋ ๊ฐ๋ ์ฑ์ด ์ข๋์?
๊ทธ๋ ๋ค๋ฉด ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ผ์ข ์ ์กฐ๊ฑด๋ถ ์์คํ ์ ์์๋ผ ์ ์์ ๊ฒ์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ด , ์๋ง.
๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ break and continue์ ์์ ์ ๋ฃจํ ํค๋์ ์กฐ๊ฑด/๊ฐ์ ์ฝ๊ฒ ๋ฃ์ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ถ ๋ฃจํ๋ ์ค๊ฐ์ ์ค๋จ์ด ์๋ ํจ์ฌ ๋ ๊ฐ๋จํ๊ณ ์ฝ๊ธฐ ์ฝ๊ณ ๋น ๋ฆ ๋๋ค.
๋ฐ๋ณต๋ฌธ์์ break ๋ฐ continue๋ผ๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ์์ ์ ์ ์ฌํฉ๋๋ค. ๋๋ก๋ ์ ์ผํ ๋์์ด ์ ๋ณ์, ์ ๊ธฐ๋ฅ( return
๋จ์ฉ)์ ๋์
ํ๋ ๊ฒ์
๋๋ค. ๋ถํํ๋ ๋ณต์กํ ๋ ์ด๋ธ์ด ๋ถ์ ํด์์ด ์์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ด ์ค๋ ๋์ ์ฃผ์ ๊ฐ ์๋๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ณธ์ง์ ์ผ๋ก ๋ณต์กํ ์ ์ด ํ๋ฆ์ ํํํ๊ธฐ ์ํด ์ ๊ณตํ๋ ๊ฐ์ ์ฌํญ ๋๋ฌธ์ ์๋นํ ๋ณดํธ์ ์
๋๋ค. ์ด ์ค๋ ๋๋ ๋์ ๋ฃจํ๊ฐ ์๋ ๋ธ๋ก์์ ๋ฒ์ด๋๋ ๊ฒ์ ๊ดํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ํ์คํ ๋ ์๋กญ๊ณ ์ฌ๋๋ค์ ๋ฃจํ ์ธ๋ถ์์ break
๋ฅผ ์ฐพ๋ ๊ฒ์ ๋ชจ๋ฅผ ์ ์์ง๋ง ๋ ์ด๋ธ์ด ํ์ํ๋ค๋ ๊ฒ์ ์๋ฏธ๋ฅผ ์๋ฉด ์ ํธ๊ฐ ์ฌ์ ํ ์กด์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ ๊ทํ์ ์์ ๋ํด ์๋ฏธํ ๊ฒ์ ๋๋ค. @mark-im- ์ด๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ด ์๋๋ผ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ฃจํ ์ ์๋นํ ํ์ค์ ์ธ ์ฌ์ฉ์ด์์ต๋๋ค.
๋ณด๋ค "์์น์ ์ธ" ์ ๊ทผ ๋ฐฉ์์ ํด๋น ๋ธ๋ก์ ๊ฐ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ธ๋ก 'a ์ดํ' ์ฆ์ ์คํ์ ๊ณ์ํ๋ return 'value ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
break
๋ return
์ ๋ํ ์ฐธ๊ณ ์ฌํญ : ์ ์ ์ ์ด ํ๋ฆ์ด๊ธฐ ๋๋ฌธ์ break
์ ํธํฉ๋๋ค. return
๋ ๋์ ์ด๋ฉฐ ํธ์ถ์์๊ฒ ๋์๊ฐ๋๋ค. ํธ์ถ์๋ ์ด๋์๋ ์์ ์ ์์ต๋๋ค. "๋๋ ๋ด ์ฑ
์์ ๋คํ๊ณ , ๋ด๊ฐ ํ๋ ์ผ์ ๋ณผ ์ ์๋ ๋ค๋ฅธ ๊ณณ์ด ์๋ค"๋ ์๋ฏธ์
๋๋ค. break
๋ ๋ฃจํ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํญ์ ์ดํ ๋ฒ์์ ์๋ ์ด๋๊ฐ๋ก ์ด๋ํฉ๋๋ค.
๋ด ์๊ฐ return 'label expr
์ด '์์น'๋ผ๋ฒจ๋ก ๋ฐํ EXPR "์ผ๋ก ๊ฐ์ฃผ ํ ์์๋"๋ด๊ฐ ๋ฌด์จ ๋ง "์ ๊ด์ ์์ ์ ๋ง ์ ์ฝ์ต๋๋ค. ๋๋ break 'label expr
์ด ๊ด์ ์์ ๋๊ฐ์ด ์ ์ฝํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค ...
๋ฐ๋ผ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ถ๋ฆฌํ์ฌ return 'label expr
์นํธํ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ธ์ด์ ์ ์ด ํ๋ฆ์ ๊ณ ๋ คํ ๋ return
์ฌ์ฌ์ฉ์ ๊ฐ์๊ธฐ ์คํ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ๋จ์ด์ง๋ ์ต์
์ด ๋์ด break 'label expr
๋ฅผ ์ ํธํ๊ฒ ๋์์ต๋๋ค.
๋๋ break 'label expr
๊ฐ ์๋๋ผ return 'label expr
์ด์ด์ผ ํ๋ค๊ณ ๊ตณ๊ฒ ๋ฏฟ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฃจํ์์ ๊ธฐ์กด์ break 'label
์ฌ์ฉ๊ณผ ์์ ํ ์ผ์นํ์ง ์์ต๋๋ค.
@SoniEx2 ๋๋ ๋ณ์๊ฐ ๋ฃจํ ๋ถ๋ณ์ฑ์ ๋ฌธ์ํํ๋ ์ข์ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์ํ ์ค๋ํซ์ ์ ํธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. OTOH, ๋ ์ด๋ธ์ ์ด๋ฆ์ผ๋ก ๋์ผํ ์์ ์ ์ํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ์๋ ์์ต๋๋ค(์ฆ, ์ด ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ด ์ ๋ ฅ๋ ๋๋ง๋ค ๋ถ๋ณ P๊ฐ ์ ์ง๋จ). ๋๋ ์ด๊ฒ์ด ์ผ์์์ ๋ช ๊ฐ์ง ๋ ๋ง์ ์ฝ๋ ์ํ์ ๊ฐ๋ ๊ฒ์ด ์ข์ ๊ณณ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค ...
์ด ๊ธฐ๋ฅ์ @est31์ ์ํด https://github.com/rust-lang/rust/pull/50045์ ๊ตฌํ๋์์ผ๋ฉฐ 2018-05-16(+17์ฃผ) ์ดํ ์ผ๊ฐ์ ์งํ๋์ด ์์ ํ๋ฅผ ์ํด ์ถฉ๋ถํ ๊ตฌ์์ก์ต๋๋ค. ๋ํ ์ด๋ฅผ ๊ตฌํํ PR์ด ๋ณํฉ๋ ์ดํ ๋ณด๊ณ ๋ ๋ฌธ์ ๋ ์์ต๋๋ค. ๊ทธ ์ดํ๋ก ํด๊ฒฐ๋์ง ์์ ๋ชจ๋ ์ง๋ฌธ๋ ํด๊ฒฐ๋์์ผ๋ฉฐ return
๋์ break
๊ฐ ํ๋ฉด ๊ตฌ๋ฌธ์ด์ด์ผ ํ๋ค๋ ๊ฐ๋ ฅํ ํฉ์๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ ์ด๋ธ ๊ตฌ๋ถ ๊ฐ(RFC 2046)์ ์์ ํํ๊ธฐ ์ํด ์ด๋ํฉ๋๋ค.
@rfcbot ๋ณํฉ
@rfcbot ๋ฌธ์ FIXME-in-tests
๋ง์ง๋ง ํ ์คํธ ํ์ผ ์๋ ํ์ฌ FIXME๊ฐ ์์ต๋๋ค.
// FIXME: ensure that labeled blocks work if produced by macros and in match arms
์์ ํํ๊ธฐ ์ ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์์๋๋ ๋์์ด ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ
์คํธ๋ฅผ ์์ฑํ์ต๋๋ค. FIXME๋ ์ค์ ๋ก ๊ตฌํ๋ฉ๋๋ค.
// run-pass
#![feature(label_break_value)]
#[test]
fn lbv_match_test() {
fn test(c: u8, xe: u8, ye: i8) {
let mut x = 0;
let y = 'a: {
match c {
0 => break 'a 0,
v if { if v % 2 == 0 { break 'a 1; }; v % 3 == 0 } => { x += 1; },
v if { 'b: { break 'b v == 5; } } => { x = 41; },
_ => {
'b: {
break 'b ();
}
},
}
x += 1;
-1
};
assert_eq!(x, xe);
assert_eq!(y, ye);
}
test(0, 0, 0);
test(1, 1, -1);
test(2, 0, 1);
test(3, 2, -1);
test(5, 42, -1);
test(7, 1, -1);
}
#[test]
fn lbv_macro_test() {
macro_rules! mac1 {
($target:lifetime, $val:expr) => {
break $target $val;
};
}
let x: u8 = 'a: {
'b: {
mac1!('b, 1);
};
0
};
assert_eq!(x, 0);
let x: u8 = 'a: {
'b: {
if true {
mac1!('a, 1);
}
};
0
};
assert_eq!(x, 1);
}
// compile-fail
#![feature(label_break_value)]
fn lbv_macro_test_hygiene_respected() {
macro_rules! mac2 {
($val:expr) => {
break 'a $val;
};
}
let x: u8 = 'a: {
'b: {
if true {
mac2!(2);
}
};
0
};
assert_eq!(x, 2);
macro_rules! mac3 {
($val:expr) => {
'a: {
$val
}
};
}
let x: u8 = mac3!('b: {
if true {
break 'a 3;
}
0
});
assert_eq!(x, 3);
let x: u8 = mac3!(break 'a 4);
assert_eq!(x, 4);
}
์ ์๋ FCP์์ FCP๋ก ์ด๋ํ๊ธฐ ์ ์ ์ด์ ์ ์ฌํ ํ ์คํธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ํ์ @Centril ์ด ์ด๋ฅผ ๋ณํฉํ ๊ฒ์ ์ ์ํ์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ ํ๊ทธ๊ฐ ์ง์ ๋ ๋๋จธ์ง ํ์ด ๊ฒํ ํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ ค ์ฌํญ:
๊ณผ๋ฐ์์ ๊ฒํ ์๊ฐ ์น์ธํ๊ณ ๋ฐ๋ํ์ง ์์ผ๋ฉด ์ต์ข ์๊ฒฌ ์ ์ถ ๊ธฐ๊ฐ์ด ์์๋ฉ๋๋ค. ์ด ํ๋ก์ธ์ค์ ์ด๋ ์์ ์์๋ ์ ๊ธฐ๋์ง ์์ ์ฃผ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์๋ ค์ฃผ์ธ์!
ํ๊ทธ๊ฐ ์ง์ ๋ ํ ๊ตฌ์ฑ์์ด ๋์๊ฒ ์ค ์ ์๋ ๋ช ๋ น์ ๋ํ ์ ๋ณด๋ ์ด ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
@rfcbot์ ๋น์ฉ-ํธ์ต์ ๋ํด ์ฐ๋ คํฉ๋๋ค.
๋ค๋ฅธ ๊ทธ๋ฃน์ ์ธ์ด์ ๋ํ ์ด ๊ธฐ๋ฅ์ "๋น์ฉ ์ด์ "์ด ํฌ๊ฒ ์ค์ด๋ค์ง ์์๋ค๊ณ ๋๊ผ์ต๋๋ค. ๋ค์ ๋งํด, ๊ธฐ๋ฅ์ด ๊ฐ์ ธ์ฌ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํฉ๋๋ค. ๋ค๋ฅธ ๋ง๋ก ํ๋ฉด ์ฌ๋๋ค์ด ์ค์ ๋ก ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ธ์ด์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ์ฝ์ด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ํจ์ฉ์ ๋น๋กํ์ง ์์๋ค.
๋๋ ์ฌ์ ํ ์ฐ๋ฆฌ๊ฐ ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ตฌํํ ์ดํ๋ก ๋ง์ด ์ฌ์ฉ๋์๋์? ์ด๋ฏธ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋์๋ค? ์ฌ๊ธฐ์ ์ด์ ์ด ์๋ค๋ฉด ์ธ์ด๋ฅผ ๋ ํฌ๊ณ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋น์ฉ์ ๋ฅ๊ฐํฉ๋๊น?
@nrc ์ ๋ ๊ฐ์
๋๋ ์๋ RFC ์ค๋ ๋์์ ์ฌ์ ํ์ด์ด ์ธ์ ์ถ์ง ์์,ํ์ง๋ง ๋ฌธ์ ๋์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ฒฝํ์ ๋ํด ๋ฌผ์ด ์ ๋นํ ์์ ์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น. ๊ทธ๊ฒ์ ์ด๋ค ์ฉ๋๋ฅผ ๋ณด์์ต๋๊น?
์์ผ๋ก ์ด ํ์, ๋๋ถ๋ถ... (๋๋ ์์ผ๋ก ์ด ํ์๋ฅผ ์ข์ํ๋ค >.<)
๋ ์ด๋ธ์ด ์ง์ ๋ ์ ํ( try_foo() 'bar?
)์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ์ฉํ๊ณ ๋ ์ฝ์ต๋๋ค.
@rfcbot ๊ด๋ จ ์ฌ์ฉ ์ฌ๋ก
Discord์ ๋ํ ๋ช ๊ฐ์ง ๋ ผ์ ์์ฝ: ์ค์ ์ฝ๋์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ก ๋ค์ ์์ฑํ ๋ ๋ ๋ช ํํ๊ฒ ๋ํ๋์ง ์๋ ๊ตฌ์ฒด์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
~FWIW, EXPR is PAT
๊ตฌํ ์ EXPR is PAT
break 'label value
์ ์ด๋ AST์์ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋์๊ฐ๋ง์ด ์์ด๋ ์ด๋ป๊ฒ ์๋ํ ์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ตฌํ EXPR?
์ปดํ์ผ๋ฌ๋์ ์์กด break 'label value
๋ฟ๋ง ์๋๋ผ. ~
~๋ ํฐ ์ ์ด ํ๋ฆ ๊ธฐ๋ฅ์ ์ํ ์ผ์ข
์ ๊ธฐ๋ณธ ๋น๋ฉ ๋ธ๋ก์ด๋ฏ๋ก ์ด์จ๋ ์ปดํ์ผ๋ฌ์์ ๊ตฌํํด์ผ ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ๊ธฐ์ "๋น์ฉ"์ ์๋ง๋ ํ๋ฉด ๊ตฌ๋ฌธ์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์
๋๋ค.~
ํธ์ง: ๋ฌธ์ ๋ฅผ ์์ ํ ์๋ชป ํด์ํ์ต๋๋ค. loop { ... break 'label value ... }
{ ... break 'label value ... }
๋ธ๋ก์ด ์๋๋ผ
๋๋ ๊ทธ๊ฒ์ด ์ด๋ฏธ ๊ตฌํ๋์๋ค๋ ๊ฒ์ ํญ์ ์์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์๋ํ ๊ธฐํ๊ฐ ์์์ต๋๋ค.
@petrochenkov Discord์์ @joshtriplett ์ ๋ํํ๋ฉด์ ๊ทธ๋ค์ ์ธ์ด ๊ตฌํ์ด ์๋๋ผ ์ฌ์ฉ์๊ฐ ์ง๋ฉดํ๋ ๋ณต์ก์ฑ์ ๋ํด ๊ฑฑ์ ํ๊ณ ์๋ค๊ณ ์ง์ ํ์ต๋๋ค.
๋ณต์ก์ฑ ์ฆ๊ฐ๋ ์ต์ํ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋
์์๊ฒ๋ ๊ฐ๋
์ด ์ด๋ฏธ ๋ฃจํ ๋ฑ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๊ฐ ๋ถ๋ช
ํด์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์กฐ๊ฑด๋ถ break ๋ฌธ๊ณผ ํจ๊ป ๋ฃจํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๋ช
๋ น๋ฌธ์ ๋ ๋ช
ํํ๊ณ ์ค์ ๋ก ์ด๊ฒ์ ๋ํด ํด๋ฆฌํผ ๋ณดํ(never_loop)๋ ์์ต๋๋ค. ๊ทธ๋์ ์ฅ์ ์ด ์๋ ๊ฒ ๊ฐ์์.
์ฌ์ฉ ์ฌ๋ก์ ๊ดํด์๋ ํด๋น ์ฃผ์ ๊ฐ ์ด๋ฏธ RFC์ ์ฌ๋ผ์์ต๋๋ค. ๋๋ ์ฌ๊ธฐ ์์ ๋์ ์ฌ์ฉ ์ฌ๋ก ๋ฅผ ์ง์ ํ๋ค . ๋ํ ๋ฐ๋ก ์๋ @joshtriplett ๋ ์ฌ์ฉ ์ฌ๋ก ์ง๋ฌธ์ ํด๊ฒฐํฉ๋๊น?
๋๋ @nrc ๋ฐ @joshtriplett์ ๋์ํ๊ณ ์ฌ๊ธฐ์ ํ๋ก์ธ์ค ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ๋ @nrc ๋ฐ @joshtriplett ๊ฐ ์ ๊ธฐํ ์ง๋ฌธ์ ๋ค์ ๋ฐฉ๋ฌธํ ๋ ์์ ํ๊ฐ ์ฐจ๋จ๋์๋ค๋ ๋ช ์์ ์ธ ๊ฒฝ๊ณ ์ ํจ๊ป ์ด RFC๋ฅผ ์ ์ ์ ์ผ๋ก ์๋ฝํ์ง๋ง @Centril์ ๋ณํฉ ์ ์์ ์ด ์ฐจ๋จ ๋ฌธ์ ๋ฅผ ์ ํ ์ธ๊ธํ์ง ์์ผ๋ฉฐ ์ด๊ฒ์ ๋งค์ฐ ํ์ค์ ์ธ "๊ธฐ๋ฅ์ด ๊ตฌ์ด" ๋ณํฉ์ผ๋ก ์ทจ๊ธํฉ๋๋ค. ์ด์ ๋ํด
์ฐจ๋จ ๋ฌธ์ ๊ฐ ์ ๊ธฐ๋์ง ์๊ณ ๋๋ถ๋ถ์ ํ ๊ตฌ์ฑ์์ด ์ด๋ฏธ ํ์ธ๋์ ์ ํํ ์ํ์์ ์ด๊ฒ์ด 2์ผ ๋ฐ ๋์ ์งํ๋์์์ ํ์ธํ๋ ๊ฒ์ ์ ์ฒด ํ๋ก์ธ์ค ์ธก๋ฉด์์ ์ ์๊ฒ ์ฐ๋ ค๋์์ต๋๋ค. ๋ ์ด์ ๋ชจ๋ ๊ตฌ์ฑ์์ ์ ๊ทน์ ์ธ ํฉ์๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฐจ๋จ๊ธฐ๊ฐ ์ ๊ธฐ๋์ง ์๊ณ FCP์ ๋ค์ด๊ฐ ์ ์๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๊ฒ์ RFC ๋ณํฉ์ ๋์ํ๊ฒ ๋ง๋ ์ด์ ๊ณ์ฝ์ ์ ๋ณต์ฒ๋ผ ๋๊ปด์ง๋ฉฐ, ์ด๋ ์ ์ ์ผ๋ก ์ ๋ณด ์ถ์ ์ด ๋ถ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@withoutboats ๋ค, ๋ง์ต๋๋ค. ์ด๋ก ์ธํด ์์ผ๋ก๋ "์์ ํ ๊ณผ์ ์์ XYZ๊ฐ ๋ ๊ฒ"์ด๋ผ๋ ์์น์ ๋ฐ์๋ค์ด์ง ์์ผ๋ ค๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ๋์น ๊ฐ๋ฅ์ฑ์ด ๊ทนํ ๋ฎ์ ์ผ๋ถ ํ๋ก์ธ์ค๊ฐ ๋ง๋ จ๋ ๋๊น์ง์ ๋๋ค.
@withoutboats
์ด์ ๋ํด
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๊ณผํฉ๋๋ค. ์ฃผ์ ์ฌํญ์ ๋ชฐ๋์ง๋ง ์ถ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค ๋ ๊ทธ๋ฌํ ์ฌํญ์ ํ์ธํ์ด์ผ ํ์ต๋๋ค.
์ด๊ฒ์ RFC ๋ณํฉ์ ๋์ํ๊ฒ ๋ง๋ ์ด์ ๊ณ์ฝ์ ์ ๋ณต์ฒ๋ผ ๋๊ปด์ง๋ฉฐ, ์ด๋ ์ ์ ์ผ๋ก ์ ๋ณด ์ถ์ ์ด ๋ถ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ํด ํด๊ฒฐ๋์ง ์์ ์ง๋ฌธ์ ํ์ด์ผ ํ๋ค. ๋๋ ๊ทธ ์์ ์์ ํ๋ก์ธ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ดํด์๋, ํด๊ฒฐ๋์ง ์์ ์ง๋ฌธ์ด RFC์ _text_ ์
fcp-merge ์ ์์ ๊ดํด์๋; ๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ด ๊ท ์ผ์ฑ๊ณผ ๋งคํฌ๋ก ์ฌ์ฉ์ ์ํด ์ ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ํ๋ฅผ ์ ์ํ๊ธฐ์๋ ๋๋ฌด ์ด๋ฅด๋ค๊ณ ์๊ฐํ๋ค๋ฉด; ์ ์์ ์ทจ์ํด ์ฃผ์ธ์ :)
@est31
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌด์กฐ๊ฑด break ๋ฌธ๊ณผ ํจ๊ป ๋ฃจํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๋ ๋ ์ค ํ๋๋ฅผ ํผํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ญ์์ค.
๋๋ ์ฌ๊ธฐ ์์ ๋์ ์ฌ์ฉ ์ฌ๋ก ๋ฅผ ์ง์ ํ๋ค .
break 'pseudo_return
๋ฅผ return Ok(vectors);
์์ผ์๊ฒ ์ต๋๊น?
์ฌ๊ธฐ ์์ ์ธ๊ธํ๋ฏ์ด ์ด๊ฒ์ ์์ผ๋ก ์ด ํ์์ ์ ์ฉํฉ๋๋ค(labeled-propagate( try_foo() 'bar?
)๊ฐ ์๋๋ผ๋).
label-break-value๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๊ธฐ๋ฅ์ด ์๋ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ช ๋ นํํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ช ๋ นํ ์ฝ๋๋ ๊ธฐ๋ฅ์ ์ฝ๋๋ณด๋ค ์ฝ๊ธฐ ์ฌ์ด ๊ฒฝํฅ์ด ์์ต๋๋ค.
๋๋ ๋ ์ค ํ๋๋ฅผ ํผํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ญ์์ค.
๋ฌผ๋ก Rust๋ ์์ ํ ํ๋ง์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌ์กฐ์กฐ์ ์ ๋ค์ ์ด๋ ค์ธ ์ ์๋ค. ์ ๋ฐ์ ์ผ๋ก "๊ธฐ์กด ๋ฐฉ์์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์"์ ๊ธฐ์ค์ผ๋ก ๊ฑฐ์ ๋ชจ๋ ์คํ ๊ธฐ๋ฅ(์ด๊ฒ์ด ์คํ ๊ธฐ๋ฅ)์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
break 'pseudo_return์ return Ok(vectors);๋ก ๋ฐ๊พธ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ค์ ๋ก ์ด ๊ฒฝ์ฐ ๋น์ ์ด ์ณ์ต๋๋ค. ํด์์ ๋ฐํ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. Ok. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋์ค์ ์ฒ๋ฆฌํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ๋ ํจ์ ๊ฒฝ๊ณ์์ ์ ๋๋ก ์๋ํ์ง ์์ผ๋ฏ๋ก ์ด๋ฌํ ๋ธ๋ก์ ํ๋์ ํจ์๋ก ์ธ์๋ถํดํ ์ ์์ต๋๋ค.
์ด์จ๋ ๊ณต์์ ์ธ ์๋จ์ ํตํด ์ธ์ด ๊ธฐ๋ฅ์ ๋ํด ์ธ๊ธํ๋ ๊ฒ์ ๋ํด ์นจ๋ฌต์ ๊นจ๊ณ tbh ํํํ๊ณ ์์ต๋๋ค. ๋ชจ๋ ๋์ผํ ์ ์ ๊ณ์ํด์ ๋ค์ ํด์ํ์ต๋๋ค. ์ด ๋ฅ์ ๋ด ์๊ฐ ๋ญ๋น์ ๋๋ค, ์ฃ์กํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ์๊ฒ ๋ ์ด์์ ์ฝ๋ฉํธ๋ฅผ ๊ธฐ๋ํ์ง ๋ง์ญ์์ค.
@est31 ์์ธํ ์๋ ค ์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ๊ฐ์ฌ ํด์.
์ผ๊ฐ Rust์ ์๊ตฌ ์ฌํญ์ผ๋ก ์ธํด ์ด๋ฌํ ํญ๋ชฉ์ ํ ์คํธํ๊ณ ์ฌ์ฉํ๋ ๋ฐ ์ ๊ทผ์ฑ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์์ ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ธ์ ๊ฐ๋ ํด๊ฒฐ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํ์ ๋ค๋ฉด ์ ๊ฐ ์ผ๋ง ์ ์ ์ ์คํ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก @est31 ์ "๋์ค์ ์ฒ๋ฆฌ ์ฒ๋ฆฌ"์ ์ ๊ตํจ: C++ ๋ฌธ์์ด ๋ฆฌํฐ๋ด ์ ๋์ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ์๋ฅผ ์์ฑํ์ต๋๋ค(์ค์ C++์ ๊ฒฝ์ฐ { L
, u8
, u
, U
, }{ R
, }) ๋ฐ ์ฌ์ฉ๋ ๋ฐ์ดํธ ์์ "๊ฐญ"์ด ์๋ ๋ค์ค ๋ฐ์ดํธ ํ ํฐ(๋ค์ ์์ด๋ ์๋ฏธ๊ฐ ํ์คํ์ง ์์ ์). get_token
ํจ์๋ ํ์ฌ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
fn get_token(&mut self) -> Token {
match decode_byte(self.source) {
// ...
// repeat four times with small variations for b'U', b'L', and b'R':
Some((b'u', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.string_literal(Utf16String, rest),
Some((b'\'', rest)) => self.char_constant(Utf16Char, rest),
Some((b'R', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.raw_string_literal(Utf16String, rest),
_ => self.identifier(rest),
},
Some((b'8', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.string_literal(Utf8String, rest),
Some((b'\'', rest)) => self.char_constant(Utf8Char, rest),
Some((b'R', rest)) => match decode_byte(rest) {
Some((b'"', rest)) => self.raw_string_literal(Utf8String, rest),
_ => self.identifier(rest),
},
_ => self.identifier(rest),
},
_ => self.identifier(rest),
},
// ...
// the "gap" mentioned above is here: single-byte '.' and triple-byte '...' but no double-byte '..':
Some((b'.', rest)) => match decode_byte(rest) {
Some((b'0'..=b'9', rest)) => self.number(rest),
// note the _inner to avoid shadowing the outer `rest` used by the inner `Dot` case:
Some((b'.', rest_inner)) => match decode_byte(rest_inner) {
Some((b'.', rest)) => self.make_token(Ellipsis, rest),
_ => self.make_token(Dot, rest),
},
_ => self.make_token(Dot, rest),
},
// ...
}
}
_ => self.identifier(rest)
s ( u
, U
, R
, L
๋ํด ๋ค ๋ฒ ๋ฐ๋ณต๋จ) ๋ฐ _ => self.make_token(Dot, rest)
์ ํผ๋ผ๋ฏธ๋๋ฅผ ํ์ธํ์ญ์์ค U
_ => self.make_token(Dot, rest)
s, identifier
, string_literal
๋ฑ์ ๋ชจ๋ make_token
๋ ํธ์ถํด์ผ ํ๋ ์ผ์ข
์ ์ฐ์ ์ ๋ฌ ์คํ์ผ์ ํ์ฑํฉ๋๋ค.
break
-from-block์ ์ฌ์ฉํ์ฌ ๋ ์ฐ์์ ์ธ ์คํ์ผ๋ก ๋ค์ ํตํฉํ๊ณ ์ถ์๊ณ loop
๋ ์ด๋ธ์ ํตํด ๊ฑฐ์ ๊ทธ๋ ๊ฒ ํ์ง๋ง ํด๋น ๋ฒ์ ์ ์ฝ๊ธฐ์ ๋๋ฌด ์ด์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ ๊ตฌ์ฒด์ ์ผ๋ก:
make_token
ํธ์ถ์ ๊ธฐ๋ณธ match decode_byte(self.source)
๋ค์์ ๋จ์ผ ์์น๋ก ์ด๋ํ๊ณ ์ธ๋ผ์ธํ์ต๋๋ค. get_token
์ํด ์ ์ง๋๋ ๋ถ๋ณ๊ณผ ํจ๊ป ์๊ณ unsafe
๋ฅผ ํฌํจํฉ๋๋ค. get_token
.break 'label self.string_literal(..)
๋ฅผ ์ฌ์ฉํ์ฌ "
๋๋ '
๋ฅผ ์ฐพ์ ๋ค์ ๋ชจ๋ self.identifier(..)
ํธ์ถ์ ํด๋น ๋งค์น ์์ ๋๊น์ง ๊ฒฐํฉํ์ต๋๋ค. .u
/ u8
/ U
/ L
๋ฅผ ํ์ธํ R
์ ํ์ธํ์ญ์์ค. R
. ์ด๊ฒ์ ๋ ์ ์ ์์ break 'label
๋ฅผ ์ฌ์ฉํ์ง๋ง ์ฌ์ ํ ์์์
๋๋ค.break 'label (Ellipsis, rest)
๋ฅผ ์ฌ์ฉํ์ฌ ...
๋ฅผ ์ฐพ์ ๋ค์ ๋ (Dot, rest)
๋ฅผ ํด๋น ๋งค์น ์์ ๋์ ๊ฒฐํฉํ์ต๋๋ค.์ ์ฒด์ ์ผ๋ก ์ด๊ฒ์ ๋ณ๋์ ๊ธฐ๋ฅ์ผ๋ก ํญ๋ชฉ์ ์ถ์ถํ ํ์๊ฐ ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก "if + ์กฐ๊ธฐ ๋ฐํ์ ์ฌ์ฉํ ํ๋ฉด ์ ์ด ํ๋ฆ"์ ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ด์ ๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋๋ ๋ชจ๋ ๊ฒ์ ์ธ ๊ฒ์ด์ง๋ง ๋๋ ๊ทธ๋ฐ ์๋๋ฅผ ํ ์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์๋ง๋ ๋ด๊ฐ ์์ ๋์ดํ ๋ชจ๋ ๋ฌธ์ ์ ๋ถ๋ช์ณค๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค). ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ์ฌ๊ธฐ์ ์ถฉ๋ถํ ๋จ์ด๋ฅผ ์ผ์ต๋๋ค. :)
@SergioBenitez http://rocket.rs/ ์ label_break_value
์ฌ์ฉ๋ฒ๊ณผ ์์ ํ์ ๋ํ ๊ทํ์ ๊ฒฌํด์ ๋ํด ์์ธํ ์ค๋ช
ํด ์ฃผ ์๊ฒ ์ต๋๊น?
@์ผํธ๋ฆด ๋ง์์ ! ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
fn transform(request: &Request, data: Data) -> Transform<Outcome<_, _>> {
let outcome = 'o: {
if !request.content_type().map_or(false, |ct| ct.is_form()) {
break 'o Forward(data);
}
let mut form_string = String::with_capacity(min(4096, LIMIT) as usize);
if let Err(e) = data.read_to_string(&mut form_string) {
break 'o Failure(FormDataError::Io(e));
}
Success(form_string)
};
Transform::Borrowed(outcome)
}
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ค์์ ํผํ ์ ์์ต๋๋ค.
Transform::Borrowed
์ถ๊ฐ.Transform
๊ฐ ๋ฐํ๋๋ ๊ฒฝ์ฐ ๋ถ์ ํํ ์ ์์ต๋๋ค.์ด๊ฒ์ด ์กด์ฌํ๋ค๋ ์ฌ์ค์ ๋๋ ๊ฝค ๊ธฐ๋ปค๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ ๊ฐ ์ฐ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ์ฆ, ์ด ๊ธฐ๋ฅ์ ์์กดํ์ง ์๊ธฐ ์ํด ์ด๊ฒ์ ๋ค๋ฅด๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
@SergioBenitez ๊ฐ์ฌํฉ๋๋ค! ๋๋ ์ด๊ฒ์ try { .. }
(๊ฒฐ๊ตญ) ๋ค์ ์์ฑํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ด๋ ๊ฒ:
fn transform(request: &Request, data: Data) -> Transform<Outcome<_, _>> {
Transform::Borrowed(try {
if !request.content_type().map_or(false, |ct| ct.is_form()) {
Forward(data)?;
}
let mut form_string = String::with_capacity(min(4096, LIMIT) as usize);
if let Err(e) = data.read_to_string(&mut form_string) {
Failure(FormDataError::Io(e))?;
}
form_string
})
}
@Centril ์, ์ฑ๊ณต ๊ฒฝ๋ก๊ฐ ํ๋๋ง ์๋ ํ ์๋ํฉ๋๋ค. ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
๋๋ ๋ ์ค ํ๋๋ฅผ ํผํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ญ์์ค.
์ด๋ ๊ฒ ํ๋ฉด ์ต์ ํ ํ๋ก๊ทธ๋จ์์ ํด๊ฒฐํ ์ ์๋ ์ถ๊ฐ ๋ถ๊ธฐ ๋๋ ์๋ธ๋ฃจํด ํธ์ถ์ ์ถ๊ฐํ ์ํ์ด ์์ต๋๋ค. ๋์๊ฒ ์ด๋ฌํ ์ ์ด ํ๋ฆ ๋ณํ์ ์๋นํ ๋ณต์กํ ์์ ์ผ๋ก ๋ณด์ ๋๋ค.
์ด๋ฏธ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋์๋ค? ์ฌ๊ธฐ์ ์ด์ ์ด ์๋ค๋ฉด ์ธ์ด๋ฅผ ๋ ํฌ๊ณ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋น์ฉ์ ๋ฅ๊ฐํฉ๋๊น?
์์ ํจ์๊ฐ ์ธ๋ผ์ธ๋ ์ ์์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ถํ์ํ ์ฝ๋ ํฝ์ฐฝ ๋๋ ์ด๋ฆฌ์์ ์ฝ๋ ์ค๋ณต์ ์ป์ ์ ์์ต๋๋ค.
๋๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ์ฐ์ํ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ์ ํธํฉ๋๋ค. ํจ์์์ ์ผ์ฐ ๋ณต๊ทํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ ์ข ๋ ๊ณ ๊ธ ์ ์ด ํ๋ฆ์ผ๋ก ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ try { .. }๋ก (๊ฒฐ๊ตญ) ๋ค์ ์์ฑํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ด๋ ๊ฒ:
[...]
์ต์ ํ๋ฅผ ์ํด ๋ถ๊ธฐ๊ฐ ๋์ ๋ ๋ ์ฝ๊ฐ ํผ๋์ค๋ฌ์ ๋ณด์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ์ํฉ์์๋ ๋ ๋ค ํ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์
'a: {try{...}}
๋๋
'a: try {...}
์ข์ ๊ฒ.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ก ๋ค์ ์์ฑํ ๋ ๋ ๋ช ํํ๊ฒ ๋ํ๋์ง ์๋ ์ค์ ์ฝ๋์์ ์ด์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
์ ๋ฅผ ์๋๊ฒ ํด์ฃผ์ญ์์ค.
์ต๊ณ ์ ์ฝ๋๋ ์๋์ง๋ง ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๊ธฐ๋ฅผ ์ํ์ต๋๋ค.
์ฐ์ ์ ๋ฌ ์คํ์ผ์ ๊ด์ ์์ ๋ฉ์ธ ๋ฃจํ๋ฅผ ์ํ ๋จธ์ ์ผ๋ก ์คํ์ ์ผ๋ก ๋ค์ ์ค๋ช ํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ์ ๋ฐ ๊ฐ์ ๊ผฌ๋ฆฌ ํธ์ถ์ ๋ ๋ค๋ฅธ ์ฃผ์ ์ ๋๋ค.
์ผ์์์ ์ฐพ์ ๋ช ๊ฐ์ง ์ฉ๋๋ฅผ ๋ฒ๋ฆฌ์ญ์์ค.
์ด ๊ธฐ๋ฅ์ด ์์ ํ๋๋ฉด ๋งค์ฐ ์ข์ ๊ฒ์ ๋๋ค. ์ด ๊ตฌ๋ฌธ์ด ์๋๋ฅผ ํฌ๊ฒ ๋จ์ํํ๊ณ ๋ช ํํ๊ฒ ํ๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์ค๋ฅ๊ฐ ์๋ ์์ ์ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ํ ํด์ ํ๋ ๊ธด ์น์ ์ ๊ฒฝ์ฐ ์ด ๊ตฌ๋ฌธ์ด ํ์ํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์์ ํ๊ฐ ์ํ๊ณ์ ๋์์ด ๋๊ณ ํน์ ํจํด์ ์์ฑํ๋ ๋ฐ ๋ ๊ท์ฐฎ๊ฒ ๋ง๋ ๋ค๋ @zesterer์ ์๊ฒฌ์ ๋์ํฉ๋๋ค.+1:
FWIW, ์ต๊ทผ์ ์ปดํ์ผ๋ฌ์์ ์ฒ์์ผ๋ก ์ฌ์ฉํ์ต๋๋ค.
ํจํด์ ์ด์ ์์ ๋์ผํฉ๋๋ค. ์ฌ๋ฌ ์กฐ๊ฑด์ ํ์ธํ๊ณ ๊ทธ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด ํ๋ ์ผ์ ๋ฉ์ถฅ๋๋ค.
https://github.com/rust-lang/rust/blob/21f26849506c141a6760532ca5bdfd8345247fdb/src/librustc_resolve/macros.rs#L955 -L987
@erickt ๋ ๋ํ ๊ฐ์ ์ด์ ๋ก ์ด๊ฒ์ ์ฌ์ฉํ๋ ค๋ ๋ช ๊ฐ์ง ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ์ฌ๋ฌ ์กฐ๊ฑด์ ํ์ธํ๊ณ ๊ทธ ์ค ํ๋๊ฐ ๊ฑฐ์ง์ด ๋๋ฉด ์ค๋จํฉ๋๋ค. ์ฆ์ ํธ์ถ๋ ํด๋ก์ ๋๋ let _: Option<()> = try { ... None?; .. };
๋ก ์ด๊ฒ์ ์์ผ ์ ์์ง๋ง ๋ ๋ค ๊ฝค ํดํคํฉ๋๋ค.
@withoutboats @nrc @joshtriplett ์ง๊ธ๊น์ง ๋ค์ํ ์ฌ๋๋ค์ด ์ ์ํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์๊ฐ์ด ์์ต๋๊น?
Ping @withoutboats @nrc @joshtriplett :) -- ์ง๋ ํ์์์ ์ฐ๋ฆฌ๋ ์ฌ๋ฌ๋ถ์ด ์์ ์ฃผ์ด์ง ๋ช ๊ฐ์ง ์๋ฅผ ๋ค์ ์์ฑํ๊ณ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง ๋ณด์ฌ์ค ๊ฐ๋ฅ์ฑ์ ๋ํด ๋ ผ์ํ์ต๋๋ค.
๋๋ ์ด ๊ธฐ๋ฅ์ ์์ ํํ๊ณ ์ถ์ง ์์ ์ด์ ์ ๋ํ ์๊ฒฌ์ ์ฌ๊ธฐ์ ์์ฑ ํ๋ ค๋ greydon์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ์ ์๊ทน์
๋ด ์ ๋ฐ์ ์ธ ๋ฐ๋๋ ๋จ์ํ Rust๊ฐ ๋ ๋ง์ ๊ฐ๋ฐฉํ ๋ถ๊ธฐ ์ ์ด ํ๋ฆ ๊ตฌ์ฑ์ ํ์๋ก ํ์ง ์๋๋ค๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ๋งค์น์ ๋ฃจํ, ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋์์ ๋ฐ์ดํฐ ์ ํ, ๊ตฌ๋ฌธ ์คํ, ํจ์ ์ถ์ํ ๋ฐ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์ ์ด ํ๋ฆ ํจํด์ ๊ฑฐ๋ํ ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ ์๋์ ์ผ๋ก ๋ฐ๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ฉฐ ๊ฐ์ธ์ ์ผ๋ก ์์ฌ ๊ฒฐ์ ํธ๋ฆฌ์ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๊ท์น์ ์ฑํํด์ผ ํ์ต๋๋ค(์๋ฅผ ๋ค์ด, ์ฒซ ๋ฒ์งธ ํจ์ค๋ก ๊ฒฐํฉ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ท์น์ด ์์ต๋๋ค. ์ฌ์ค ๊ทธ๊ฒ์ ๊ฒฐํฉ์๋ก ๋ ์ข์ ๊ฒ์ ๋๋ค).
Rust์ ์ ์ด ํ๋ฆ ๋๊ตฌ ์์์ ๋ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉํ ์ ์๊ณ ๋งค์ฐ ์ ์ฐํ ์ ํ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ์ ํผํ๊ณ ์ถ์ต๋๋ค. ์ ๋ ํน์ ํ๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋์์ผ๋ก ํ๊ณ ์ธ์ฒด ๊ณตํ์ ์ธ ์ํฅ์ด ๋์ ์ ์ด ํ๋ฆ์ ์ถ๊ฐํ๋ ๋ฐ๋ง ๊ด์ฌ์ด ์์ต๋๋ค. ๋ด ์๊ฐ์ ์ด ๊ตฌ์ฑ์ ์ ํํ ๋ฐ์ ๋ ์์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฆ, ๊ด๋ฒ์ํ๊ฒ ์ ์ฉํ ์ ์๊ณ , ๊ทน๋๋ก ๊ฐ๋ ์ฑ์ด ๋์ผ๋ฉฐ, ๋์๋ณด๋ค ์ฝ๊ฐ ๋ ํธ๋ฆฌํฉ๋๋ค.
๊ฒ๋ค๊ฐ ์ด ๊ธฐ๋ฅ์๋ ๋ ๋ค๋ฅธ ๋ถ์ ์ ์ธ ํน์ฑ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ ํธํ์ฑ์ผ๋ก ์ธํ ๋ถ๊ท์น์ฑ์
๋๋ค. break
๊ฐ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ๋ฃจํ์์ ๋ฒ์ด๋ ๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ๊ฒฝ์ฐ์๋ง ๋ธ๋ก์์ ์ดํํ๋ ๊ฒ์ ๋งค์ฐ ๋ถ๊ท์นํฉ๋๋ค. ์ด๊ฒ์ ๊ธฐ๋ฅ์ ์ผ๋ฐ ๊ฒฝ์ฐ๋ณด๋ค ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ๋ด๊ฐ ์๊ฐํ๋ ์ต์
์ ์์น์ธ ์ดํด๋์์ ๋ถ์ ์ ์ธ ์์ฑ์ ์
ํ์ํต๋๋ค.
๋ํ ์ง์คํด์ผ ํ ํจ์ฌ ๋ ์ค์ํ ๊ธฐ๋ฅ์ด ๋ง์ด ์๋ค๊ณ ์๊ฐํ๋ฉฐ, ์ด์ ๋ํด ๋ช ํํ ์๊ฒฌ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด ์ ์์ ๋ํด ๊ธด ํฉ์ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ๋ณด๋ค๋ ๊ฒํ ๋ฅผ ์ฐ๊ธฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ชจ๋ ํฌ๋ ์ดํธ๋ฅผ ์ฐพ์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ก ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ์ณ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@withoutboats ์ ์ ๊ฐ์ ๋ฐ๋ ์๊ฒฌ์ ๋งค์ฐ ํจ๊ณผ์ ์ผ๋ก
์ ๋ ์ฌ๊ธฐ์ ๊ณผ๊ฐํ๊ฒ ์งํํ๊ฒ ์ต๋๋ค.
@rfcbot ์ทจ์
@rfcbot ์ฐ๊ธฐ
@joshtriplett ์ ์์ด ์ทจ์๋์์ต๋๋ค.
ํ์ @joshtriplett ๊ฐ ์ฐ๊ธฐ๋ฅผ ์ ์ํ์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ ํ๊ทธ๊ฐ ์ง์ ๋ ๋๋จธ์ง ํ์ด ๊ฒํ ํ๋ ๊ฒ์ ๋๋ค.
ํ์ฌ ๋์ด๋ ์ฐ๋ ค ์ฌํญ์ด ์์ต๋๋ค.
๊ณผ๋ฐ์์ ๊ฒํ ์๊ฐ ์น์ธํ๊ณ ๋ฐ๋ํ์ง ์์ผ๋ฉด ์ต์ข ์๊ฒฌ ์ ์ถ ๊ธฐ๊ฐ์ด ์์๋ฉ๋๋ค. ์ด ํ๋ก์ธ์ค์ ์ด๋ ์์ ์์๋ ์ ๊ธฐ๋์ง ์์ ์ฃผ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์๋ ค์ฃผ์ธ์!
ํ๊ทธ๊ฐ ์ง์ ๋ ํ ๊ตฌ์ฑ์์ด ๋์๊ฒ ์ค ์ ์๋ ๋ช ๋ น์ ๋ํ ์ ๋ณด๋ ์ด ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
@withoutboats
Rust์ ์ ์ด ํ๋ฆ ๋๊ตฌ ์์์ ๋ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉํ ์ ์๊ณ ๋งค์ฐ ์ ์ฐํ ์ ํ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ์ ํผํ๊ณ ์ถ์ต๋๋ค. ์ ๋ ํน์ ํ๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋์์ผ๋ก ํ๊ณ ์ธ์ฒด ๊ณตํ์ ์ธ ์ํฅ์ด ๋์ ์ ์ด ํ๋ฆ์ ์ถ๊ฐํ๋ ๋ฐ๋ง ๊ด์ฌ์ด ์์ต๋๋ค.
๋๋ ์ด ์์น์ ๋์ํ๋ฉฐ ์ด ๊ธฐ๋ฅ์ด ๊ทธ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค(ํน์ ํ๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋์์ผ๋ก ํ๋ ์น์ํ ์ ์ด ํ๋ฆ). ์์ ์ ๊ณต๋ ์์ ์ ๊ฐ์ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ฑฐ๋ ์์ฑํ์ ๋ ์ด๊ฒ์ด ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ์ฌ๋ฌ ๋ฒ ์์ต๋๋ค. loop
์ ๊ฐ์ ๊ธฐ์กด ์ ์ด ํ๋ฆ ๊ตฌ์กฐ๋ฅผ ๋์ ๋ฌด์กฐ๊ฑด break
loop
๊ณผ ํจ๊ป ์ฌ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ค๋๋๊ณ ?
, await!
์ฌ์ฉ์ผ๋ก ์ธํด ์ฆ์ ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค
loop
+ ํํ break
๊ฒ์ ํผ๋์ค๋ฝ๊ณ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์คํ์ผ์ ์ ์ด ํ๋ฆ์ ์ํด ๋ง๋ค์ด์ง ๋๊ตฌ๋ฅผ ๋จ์ฉํ๋๋ก ์๊ตฌํ๋ ๊ฒ๋ณด๋ค ์ค์ ์๋๋ฅผ ์ง์ ํ๊ฒ ํ๋ ๊ฒ์ ์ ํธํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ ๊ฐ loop
๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์ฌ์ค๊ณผ ์ ์ฌํ์ง๋ง ๋ค๋ฅธ ์ธ์ด๋ while true { ... }
ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋ช
ํํ ์๋๋ฅผ ํํํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ถ๊ฐ๋ก, ์ด ๊ธฐ๋ฅ์ ์ฐ๋ฆฌ๊ฐ ๋ ์ด๋ธ์ด ๋ถ์ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ๋ ์ด๋ธ์ด ์ง์ ๋ ๊ฒ๋ค์์ ๋ฒ์ด๋๋ ๊ฒ์ ๊ฐ์ํ ๋ Rust๊ฐ ๊ฐ์ง ๊ฒ์ผ๋ก ํญ์
TL;DR: ์ด ๊ธฐ๋ฅ์ ๋ง์ด ์ค์ฒฉ๋ if
๋ฌธ์ ํตํด ๋๋ ๋ฃจํ ์ค๋จ ๊ฐ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์ ๋จ์ฉํจ์ผ๋ก์จ๋ง ๋ฌ๋ฆฌ ์์ฑํ ์ ์๋ ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ง์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ธ๋ก์ด ๋ด๊ฐ ์์ํ๋ ๋๋ก ๋์ํ๋๋ก ํ๋ ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ํ ์์ ์ถ๊ฐ ์ฌํญ์ด๋ฉฐ ํจ์ฌ ๋ ํด์ปค๊ฐ ์๋ ๋ด๊ฐ ์๋ฏธํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค.
@cramertj ์ฃ์กํฉ๋๋ค. ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ๋น์ ๊ณผ @withoutboats / @joshtriplett ๊ฐ ์๋ก ์ ๋ฐ๋์ ๋ง์ ํ๋ ๊ฒ
(fwiw, @withoutboats /@joshtriplett์ ๋์ํฉ๋๋ค)
@mark-im ์ด ๊ธฐ๋ฅ์ ๋ซ์์ผ ํ๋ค๋ ์๊ฒฌ์ ๋์ํ์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ณํฉ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค (๋ด ์๊ฒฌ๊ณผ ์์ ํ์ธ๋์ผ๋ก ํ์๋จ).
๋๋ ์ฐ๋ฆฌ๊ฐ ํน์ ํ๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ํด ๋๊ธฐ๊ฐ ๋ถ์ฌ๋์ง ์์ ์๋ก์ด ์ต์ํ์ง ์์ ๋๊ตฌ๋ฅผ ์ถ๊ฐํด์๋ ์๋๋ค๋ @withoutboats์ ๋์ํฉ๋๋ค. ๋๋ ์ด ๊ธฐ๋ฅ ์ด ์น์ ๊ฒ์ด๋ฉฐ ๊ตฌ์ฒด์ ์ด๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ํด ๋๊ธฐ๊ฐ ๋ถ์ฌ
@withoutboats
๋๋ ์ด ์คํ์ ๋์ํ ๊ฒ์ด ์ฝ๊ฐ ๋ถ๊ณตํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ถ์ ์ ์ฆ๋ช ํ๊ธฐ๋ ์ด๋ ต์ง๋ง ์ด๋ค ์ข ๋ฅ์ ์ฝ๋ ์ํ์ด ์ธ์ด์ ์ด๋ฌํ ํํ์ ์ ์ด ํ๋ฆ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ํ ๋ฐ๋๋ฅผ ๊ทน๋ณตํ ์ ์๋์ง ์ ํ ๋ชจ๋ฆ ๋๋ค.
์ ๋ ์ฐ๋ฆฌ๊ฐ ์ค์ ํ ๊ธฐ์ค์ด "label-break-value๋ก ๋ ์ ์์ฑํ ์ ์๋ ์ฝ๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์ญ์์ค"๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ "label-break-value๋ฅผ ์ํ๋ ํน์ ์ฝ๋๊ฐ ๋ ๋ช ํํ๊ฒ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ๋์์ต๋๋ค." ์ด ๋ํ๋ ๋น์ ๊ณผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ๊ธฐ๋ฅ์ด ์ด๋์ ์ ์ฉํ์ง ๋๊ธฐ๋ฅผ ๋ถ์ฌํ๋ ์๋ฅผ ์์ฒญํ์ ๋ ์์๋์์ผ๋ฉฐ ์ด ์ค๋ ๋์ ๋ง์ ์ฌ๋๋ค(์ ๋ฅผ ํฌํจํ์ฌ)์ด ์๋ฅผ ์ ๊ณตํ์ต๋๋ค. ๊ทธ๋ค์ ๋น์ ์ด๋ @joshtriplett ์๊ฒ ์ค๋๋ ฅ์ด ์์
์ ๋ ์ฌ๊ธฐ์ ๊ณผ๊ฐํ๊ฒ ์งํํ๊ฒ ์ต๋๋ค.
@rfcbot ์ทจ์
@scottmcm ์ ์์ด ์ทจ์๋์์ต๋๋ค.
๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ๋ฃจํ์์ ๋ฒ์ด๋ ๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ๊ฒฝ์ฐ์๋ง break๊ฐ ๋ธ๋ก์์ ์ดํํ๋ ๊ฒ์ ๋งค์ฐ ๋ถ๊ท์นํฉ๋๋ค.
์ค๋ ๋์์ ์ธ๊ธ๋์๋์ง ์ฌ๋ถ๋ ํ์คํ์ง ์์ง๋ง break;
์ํด ๋์์ด ์ง์ ๋์ง ์๋ ๋ธ๋ก์ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ ์ด๋ค ์๋ฏธ์์ ๋ ์ด๋ธ์ด ์ง์ ๋ loop
๋ณด๋ค ์ง์ ์ผ๋ก ๋ ๊ฐ๋ ฅํฉ๋๋ค.
๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ ์ฌ์ฉํ๋ฉด ๋ด๋ถ์์ break;
๋ฅผ ์ง์ํ๋ ์ ์ด ํ๋ฆ ๋งคํฌ๋ก๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ๋งคํฌ๋ก ์ธํ๋ผ๋ ์ฌ์ฉ์์๊ฒ ์์ ํ ๋ณด์ด์ง ์์ต๋๋ค.
๋ ์ด๋ธ์ด ์๋ ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ด๋ธ์ด ์๋ break;
๊ฐ ์ฌ์ฉ๋์ด ์๋ํ ๋์์ด ์๋ ๋งคํฌ๋ก ์ธํ๋ผ์ ํฌ์ฐฉ๋ ์ํ์ด ํญ์ ์์ต๋๋ค.
๋ด EXPR is PAT
ํ๋กํ ํ์
์์๋ ์ด๊ธฐ์ ๋์๊ฐ๋ง์ ์ํด ์ผ๋ฐ์ ์ธ loop
ํ์ง๋ง ์์ ์ธ๊ธํ ๋ฌธ์ ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ํนํ ์ปดํ์ผ๋ฌ๋ฅผ ๋ถํธ์คํธ๋ฉํ ์ ์์์ต๋๋ค.
๊ทธ ๋น์์๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ด ๊ตฌํ๋์ง ์์๊ธฐ ๋๋ฌธ์ AST์ ํน๋ณํ "untargetable loop
"๋ฅผ ๋์
ํ๊ณ ๋์๊ฐ๋ง์ ์ฌ์ฉํด์ผ ํ์ต๋๋ค.
๋ด ํ์ธ๋์ ํ์๋ ๋๋ก ์ง๊ธ์ ์์ ํ์ ์ฐฌ์ฑํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋งคํฌ๋ก์ ๊ธฐ๋ฅ์ ํจํด์ ์ฝ๊ฒ ๋ง์ง ์๋ ์ ์ด ํ๋ฆ์ ์ฉ์ดํ๊ฒ ํ๋ ์ธ์ด์ ์์ฐ์ค๋ฌ์ด ํ์ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. NLL์ด ์๋ช ์ ์ดํ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ง๋ค๋๋ผ๋ ์๋ช ์ด ์๋ ๋ธ๋ก์ ์ฃผ์์ ์ถ๊ฐํ ์ ์๋ค๋ ๊ฒ์ type ascription๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ต์กํ์ ์ผ๋ก ๋์์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ํฉ์๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ด๋ ค์ ๊ธฐ ๋๋ฌธ์ ํฉ์๋ฅผ ์ฐพ๋ ๋ฐ ๊ด์ฌ์ด ์์ผ๋ฏ๋ก try { ... }
์ ๋ํ ์์
์ ์๋๋ฅผ ๋์ด๊ณ https://github.com ์ ์ฌ์ฉํ ์คํ ์์
์ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ด ์ข์ต๋๋ค. @petrochenkov ์ EXPR is PAT
๊ตฌ๋ฌธ๊ณผ ๋์์).
์ฃ์กํฉ๋๋ค. ์ง๊ธ ์ํ๊ฐ ์ด๋ป์ต๋๊น? ์ฐ๋ฆฌ๋ FCP์ ์์ต๋๊น?
@mark-im proposed-final-comment-period
๋๋ final-comment-period
๋ ์ด๋ธ ์ค ์ด๋ ๊ฒ๋ ๋ฌธ์ ์ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ FCP๋ ์ด์ ๋ํ ์ ์์ ์ฐธ์ฌํ์ง ์์ต๋๋ค.
(๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ FCP์ ํ ๋ฒ๋ ๊ฐ๋ณธ ์ ์ด ์์ง๋ง ์ธ ๊ฐ์ ํ์ธ๋์ ์ ์ธํ ๋ชจ๋ ํญ๋ชฉ์ ์ ํํ์ฌ FCP์ ์ ์ฅํ๊ฒ ๋ค๋ ์ด๊ธฐ ์ ์์ด ์์์ง๋ง)
@scottmcm
์ ๋ ์ฌ๊ธฐ์ ๊ณผ๊ฐํ๊ฒ ์งํํ๊ฒ ์ต๋๋ค.
@joshtriplett ์ ์ด ๋ฐ๋ณต์ ์ธ ํํ์ ๋งค์ฐ ๋์์ ์ด์์ต๋๋ค. lang ํ์ ์ผ์์ผ๋ก์ ๋ค๋ฅธ ๊ธฐ์ฌ์๋ค๊ณผ ์์ฌ์ํตํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ์คํ๊ฒ ์๊ฐํ์ญ์์ค.
๋๋ ์ด๊ฒ์ด ์ฌ์ค ์ข์ ์๊ฐ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ๋๋ ์ด์ ์ ์ด ๊ธฐ๋ฅ์ ๋ํด ๋งค์ฐ ๋ฐ๋ํ์ผ๋ฉฐ ์ฌ์ ํ ์ด๊ฒ์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํด์๋ ์ ๋๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์์ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์ ์ค๋๋ ฅ์ด ์์ง๋ง ๋ ์์ ๊ธฐ๋ฅ์ ๋ ์ ํตํฉ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ ๋ง ์ค๋๋ ฅ ์๊ฒ ์ฐพ์ ๊ฒฝ์ฐ๋ ๋งคํฌ๋ก์ ์ถ๋ ฅ์
๋๋ค. ์ฌ์ฉ์๊ฐ return
์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ์ฝ์
ํ ์ ์๋ค๋ฉด ์ด๊ฒ์ ํจ์๋ก์ ๋ณํ์ ๋ฐฐ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ์ํ๋ ๊ฒ์ ํ๋ฒํ goto
์
๋๋ค. 'ํฐ' ์๋ฃจ์
์ด ํ ํฐ์ด ์๋ HIR์ ์ถ๋ ฅํ ์ ์๋ ๋งคํฌ๋ก์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๊ทธ ๋์ ๋งคํฌ๋ก ์์ฑ์์๊ฒ ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ด๋ฏ๋ก ๊ท ํ์ ๋ง์ถฐ ์์ ํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๊ตฌ๋ ์ง ๋๋ฆฌ๊ณ ๋ ์ง๊ด์ ์ด๋ฉฐ ๋ ์ธ์ฒด ๊ณตํ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ค์ ์์ฑํ๋ ค๊ณ ์๋ํ ์ ์ด ์์ต๋๊น?
๋ธ๋ก์ ๊นจ๋ ๊ฒ์ ์ธ์ฒด๊ณตํ์ goto์ ๊ฐ์ต๋๋ค. goto์ ๋ฌธ์ ๋ ๊ฑฐ์ ์์ง๋ง ๊ฐ๋ ฅํฉ๋๋ค.
@nrc ๋ ์ ๋ง์์ ๋ณํ๋ฅผ ๋ฐํ์ผ๋ก label_break_value
์์ ํ๋ฅผ ์ํด ๋ ์์ง์
๋๋ค.
๋ด ๋ณด๊ณ ์๋ https://github.com/rust-lang/rust/issues/48594#issuecomment -421625182์์ ์ฐพ์ ์ ์์ต๋๋ค.
@rfcbot ๋ณํฉ
@rfcbot ๋ฌธ์ FIXME-in-tests
@joshtriplett ๋ฐ @withoutboats ๊ฐ ์ฌ์ ํ ๊ฐ๊ณ ์๋ ์ฐ๋ ค ์ฌํญ์ ์ ๊ธฐํ ์๊ฐ์ ๊ฐ์ง ์ ์๋๋ก ๊ทธ๋ฌํ ์ฐ๋ ค ์ฌํญ์ ๊ธฐ๋กํ๊ฒ ์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ๊ทธ๋ฌํ ์ฐ๋ ค๊ฐ ์๋ค๊ณ ๋งํ๊ฑฐ๋ ๊ทธ๋ค ์ค ํ ๋ช ์ด ์์ ์ ์ฐ๋ ค๋ฅผ ์ ๊ธฐํ๋ฉด ํด์ ํ๊ฒ ์ต๋๋ค.
@rfcbot ์ ์ฌ์ ํ โโ๊ฐ์ง๊ณ ์์ ์ ์๋ ์ฐ๋ ค ์ฌํญ์ ์ ๊ธฐํ ์๊ฐ์ ์ค ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์ ์ ๋ํ ํ๋ก์ธ์ค ์ฐธ๊ณ ์ฌํญ์ผ๋ก, ์ ์์ ์ทจ์ํ๊ณ ์๋ค๊ฐ๋ค ํ์ง ๋ง์ธ์... ์์ผ๋ก ์งํํด์ผ ํ ์ฌํญ์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ฐ๋ ค ์ฌํญ์ ์ฌ์ฉํ์ธ์.
ํ์ @Centril ์ด ์ด๋ฅผ ๋ณํฉํ ๊ฒ์ ์ ์ํ์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ ํ๊ทธ๊ฐ ์ง์ ๋ ๋๋จธ์ง ํ์์ด ๊ฒํ ํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ ค ์ฌํญ:
๊ณผ๋ฐ์ ์ด์์ ๊ฒํ ์๊ฐ ์น์ธํ๋ฉด(์ต๋ 2๊ฐ์ ์น์ธ์ด ๋ฏธ๊ฒฐ ์ํ์) ์ต์ข ์๊ฒฌ ์๋ ด ๊ธฐ๊ฐ์ด ์์๋ฉ๋๋ค. ์ด ํ๋ก์ธ์ค์ ์ด๋ ์์ ์์๋ ์ ๊ธฐ๋์ง ์์ ์ฃผ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์๋ ค์ฃผ์ธ์!
ํ๊ทธ๊ฐ ์ง์ ๋ ํ ๊ตฌ์ฑ์์ด ๋์๊ฒ ์ค ์ ์๋ ๋ช ๋ น์ ๋ํ ์ ๋ณด๋ ์ด ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
@rfcbot ์ฐ๋ ค ์ฐจ๋จ
์ ๋ ์ด๋ฏธ Rust์ ์ด ๊ธฐ๋ฅ์ด ์์ด์ผ ํ๋ค๋ ์ ์ ์ฅ์ ๋ฐํ์ต๋๋ค. ๊ฐ๊น์ด ์์ผ ๋ด์ ์ด ์ ์์ ๋ํ ํฉ์์ ๋๋ฌํ๋ ํ๋ก์ธ์ค์ ์ฐธ์ฌํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ ์ ์๋ ํ๋ก์ ํธ์ ์ฐ์ ์์๊ฐ ์ถฉ๋ถํ ๋์์ง ์์ฌ๋ฉ๋๋ค.
@rfcbot ํด๊ฒฐ
์ค์ํ๋ค๋ฉด: Zig์๋ ์ด ๊ธฐ๋ฅ์ด ์์ต๋๋ค .
2019๋ 1์ 5์ผ ์ค์ 9:18:29 PST, Mazdak Farrokhzad [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@rfcbot ํด๊ฒฐ
๊ทธ๋ค์ ์ฌ์ ํ โโ๊ฐ์ง๊ณ ์์์ง๋ ๋ชจ๋ฅด๋ ์ฐ๋ ค๋ฅผ ์ ๊ธฐํ ์๊ฐ์ ์ฃผ๊ณ
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ฐ๋ ค๋ฅผ ์ ๊ธฐํ์ผ๋ฉฐ "์ด๊ฒ์ ์ธ์ด๋ก๋์ด์๋ ์๋ฉ๋๋ค"์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฐ ๊ฑฑ์ ์ด ์ฌ๋ผ์ง์ง ์์ต๋๋ค.
๋งคํฌ๋ก๊ฐ IR์ ์์ฑํ ์ ์์ด์ผ ํ๋ค๋ nrc์ ๊ฐ๋ ์ ์ ํธํฉ๋๋ค. ์ด๊ฒ์ ์ธ์ด์ ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ฐ๋์ ์ถ๊ฐํ์ง ์๊ณ ๋ ์ด๊ฒ๊ณผ ๋ฏธ๋์ ๋ง์ ๊ฐ๋ฅ์ฑ์ ๋ํด ์์ ํ ํฉ๋ฆฌ์ ์ธ ์๋ฃจ์ ์ฒ๋ผ ๋ณด์ ๋๋ค.
@joshtriplett
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ฐ๋ ค๋ฅผ ์ ๊ธฐํ์ผ๋ฉฐ "์ด๊ฒ์ ์ธ์ด๋ก๋์ด์๋ ์๋ฉ๋๋ค"์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฐ ๊ฑฑ์ ์ด ์ฌ๋ผ์ง์ง ์์ต๋๋ค.
๋ช
ํํ ํ์๋ฉด ์ ์์ด ์ทจ์๋ ํ ๋ด์ด ๋ฑ๋ก๋ ์ด์ ์ฐ๋ ค ์ฌํญ์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ @rfcbot
๋ฑ๋กํ๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค. ์ฐ๋ ค ์ฌํญ์ด ์๋ค๋ ๊ฒ์ ์๊ณ
๋งคํฌ๋ก๊ฐ IR์ ์์ฑํ ์ ์์ด์ผ ํ๋ค๋ nrc์ ๊ฐ๋ ์ ์ ํธํฉ๋๋ค. ์ด๊ฒ์ ์ธ์ด์ ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ฐ๋์ ์ถ๊ฐํ์ง ์๊ณ ๋ ์ด๊ฒ๊ณผ ๋ฏธ๋์ ๋ง์ ๊ฐ๋ฅ์ฑ์ ๋ํด ์์ ํ ํฉ๋ฆฌ์ ์ธ ์๋ฃจ์ ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๋๋ ๊ทธ๊ฒ์ด ๋ ๋์ ์์ด๋์ด์ธ์ง ์ ํ ๋ชจ๋ฆ
๋๋ค. ๋งคํฌ๋ก์ ๊ฒฐ๊ณผ๊ฐ ์๋ ์ด์ ์ด ์๋ break 'label expr
์ ๋ค์ ์ ๋ ดํ ์๋ฃจ์
๋ณด๋ค ๋ค์ ํฌ๊ธฐ์ ์ด๋ฉฐ("์ด๊ฒ์ ๋์์ธ์ด ๋์๋๊ธฐ๊น์ง ๋ช ๋
์ด ๊ฑธ๋ฆด ์ ์์"์ด๋ผ๋ ์๋ฏธ์์) ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ํ์ฅ.
_์ด ๋ฌธ์ ์ ๋ค๋ฅธ ๋ชจ๋ ๋ฌธ์ ์ ๋ํ ํ๋ก์ธ์ค ์ฐธ๊ณ ์ฌํญ์ผ๋ก, ์ ์์ ์ทจ์ํ๊ณ ์๋ค ๊ฐ๋ค ํ์ง ๋ง์ธ์... ์์ผ๋ก ์งํํด์ผ ํ ์ฌํญ์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ฐ๋ ค ์ฌํญ์ ์ฌ์ฉํ์ธ์._
๋๋ ํ์คํ ๊ทธ๊ฒ์ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์์ ์ ์ ํ ๋ฉ์ปค๋์ฆ์ด ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฐ๋ ค๋ "์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ฉด ์น์ธํ๊ฒ ์ต๋๋ค"์ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ๋ "์ด๊ฒ์ ์ ํ ์งํ๋์ด์๋ ์๋๋ฉฐ '๋ณํฉ'์ด ์๋ชป๋ ๋์์ ๋๋ค. ๋์ '๋ซ๊ธฐ'๋ฅผ ์ํฉ๋๋ค." ๊ทธ๊ฒ์ "์ฐ๋ ค"๋ผ๋ ๋ฉ์ปค๋์ฆ์ผ๋ก ๊ฐ์ฅ ์ ์ฒ๋ฆฌ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@joshtriplett ๊ด์ฌ ์๋ ๋ถ๋ถ์ผ๋ก, ์ด์ ์ ์ธ๊ธํ ๋ฌธ์ ์ ๋ํด ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น? ์๋ RFC ์ค๋ ๋๋ฅผ ์ดํด๋ณด์๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฌด์์ ์ธ๊ธํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ฐ์ฌ ํด์.
@rfcbot์ ์ธ์ฒด ๊ณตํ ๋ฐ ์ต์ ํ/์ฑ๋ฅ์ ๋ํด ์ฐ๋ คํฉ๋๋ค(์ฑ๋ฅ ๋ฐ ์ธ์ฒด ๊ณตํ ๊ฐ์์ ๋ น์ฌ์ง ์๋ ์ https://gist.github.com/SoniEx2/fc5d3614614e4e3fe131#file-special-lua )
์ด ๊ถ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด idk
(์ผ๋ถ "๋์๊ฐ๋ง"(์ฌ์ค ๋๋ ๊ทธ๊ฒ์ด ๋์๊ฐ๋ง์ ๋ฐ๋๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค - goto๋ ์์์ ์ด๋ฉฐ, desugar๋ฅผ goto๋ก ๋ฐ๋ณตํจ)์ด ๋งค์ฐ ๋์ฐํฉ๋๋ค)
(๋ํ ๋ฃจ์์๋ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ํญ๋ชฉ์ด ์์ผ๋ฏ๋ก goto๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ์ต์ํ ํ๋์ break-block์ด ์ฌ์ ํ ํ์ํ์ง๋ง ์๋ง๋ ๋ ๊นจ๋ํ "๋์๊ฐ๋ง"์ด ํ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.)
@rfcbot ๋ฌธ์ ๋ ๋ณํฉํ์ง ๋ง์์ผ ํฉ๋๋ค.
(Discord์์ @centril์ด ์ ์ํ ๋๋ก)
์ด๊ฒ์ด ์์ ํ์ ๋ํ ์ฐฌ์ฑ์ธ์ง ๋ฐ๋์ธ์ง ํ์คํ์ง ์์ง๋ง ์ค๋๋ ์์ ์ ์ธ Rust์์ ์ธ์ฝ๋ฉํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๋ค๋ ์ ์ ์ ์ํ์ธ์.
fn main() {
'foo: for _ in 0..1 {
println!("break");
break 'foo;
println!("broken");
}
}
๋ฐ๋ผ์ ํํธ์ผ๋ก๋ for _ in 0..1
๋ง ์๋ตํ๊ณ ์ธ์ด๊ฐ ๊ฑฐ์ ์ฑ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์์ ํํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ํํธ์ผ๋ก๋ ์ค๋๋ ์ฝ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์์ ํํด์๋ ์ ๋ฉ๋๋ค. ๊ทธ๊ฒ์ ์ ๋ง๋ก ํ์ํฉ๋๋ค) ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ์ํฐ ํจํด์ ์ฌ์ฉํ๋๋ก ์กฐ์ฅํด์๋ ์๋ฉ๋๋ค.
๊ทธ๊ฒ์ ๋ค์ ํผ๋์ค๋ฝ๊ณ ๋ ์ด๋ธ์ด ํ์ํ์ง ์์ต๋๋ค.
๋ธ๋ก์ ๊นจ๋ ๊ฒ์ ํจ์ฌ ๋ ํผ๋์ค๋ฝ๊ณ ๋ ์ด๋ธ์ด ํ์ํฉ๋๋ค.
์ ๋ธ๋ก์ ๊นจ๋ ๊ฒ์ด ๋ฐํจํด์ด๋ผ๊ณ ์๊ฐํ๋์ง ์ดํด๊ฐ ๋์ง ์์ต๋๋ค. X์ ์ ์ฉ๋๋ ๊ฒ์ด ๋ฐ๋์ not-quite-X์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค. ๋๋ ์ปดํจํฐ๋ฅผ 299.99๋ฌ๋ฌ์ ์ด ์ ์์ง๋ง 299.98๋ฌ๋ฌ๋ ์ด ์ ์๋ค. ๋น๋ก "๊ธฐ๋ณธ์ ์ผ๋ก" ๋๊ฐ๋๋ผ๋ ๋ง์ด๋ค.
@nrc
์ด๊ฒ์ด ์์ ํ์ ๋ํ ์ฐฌ์ฑ์ธ์ง ๋ฐ๋์ธ์ง ํ์คํ์ง ์์ง๋ง ์ค๋๋ ์์ ์ ์ธ Rust์์ ์ธ์ฝ๋ฉํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๋ค๋ ์ ์ ์ ์ํ์ธ์.
'foo: for _ in 0..1 { break 'foo; }
๋ฐ๋ผ์ ํํธ์ผ๋ก๋
for _ in 0..1
์๋ตํ๊ณ ์ธ์ด๊ฐ ๊ฑฐ์ ์ฑ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์์ ํํด์ผ ํฉ๋๋ค.
'a: for _ in 0..1 { break 'a }
๋ ๋ช
์์ ์ธ ๋ชฉํ๊ฐ 'a: { ... break 'a e; ... }
์ฐ์ง ๋ชปํ๋๋ก ํ๋ ๊ฒ์ด๋ผ๋ฉด ์๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ ๊ฒ์ฌ๊ธฐ, MIR ๋ฐ LLVM์ด ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฐ๋น์ง IR์ ์์ฑํ์ฌ ์ปดํ์ผ ์๊ฐ์ ์
ํ์ํค๋ ๋จ์ ์ด ์์ต๋๋ค(์ต์ํ LBV์ ๋นํด).
๋ฐ๋ฉด์ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์์ ํํด์๋ ์ ๋ฉ๋๋ค. ์๋ํ๋ฉด ์ค๋๋ ์ฝ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค(์ ๋ง ํ์ํ ๊ฒฝ์ฐ). ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ์ํฐ ํจํด์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํด์๋ ์ ๋ฉ๋๋ค.
์ ๋ LBV๊ฐ ๋ฐํจํด์ด๋ผ๋ ๋ฐ ๋์ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ Rust๋ฅผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง๋๋ ๋์ ์ ๋ช ๋ นํ ์ ์ด ํ๋ฆ์ Rust์ ์ฃผ์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌํ ์ ์ด ํ๋ฆ์ด ์๋ ๊ฒ์ ์ ํธํ์ ์๋ ์์ง๋ง ์ด๋ ๋น์ฐํ ์ผ์ ๋๋ค. ๋ฌธ์ ๋ LBV๊ฐ Rust์ ๋ค๋ฅธ ๋ช ๋ น์ ๋ฉ์ปค๋์ฆ๋ณด๋ค ๋ ์ฝ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์๋์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ๋ ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํจ์๋ ์งง๊ณ (์ธ๋ก) ์๊ฒ(๋ค์ฌ์ฐ๊ธฐ) ์ ์งํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ธธ๊ณ ์์ ๊ฒ๋ณด๋ค ๊ธธ๊ณ ์์ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ LBV๊ฐ ์ข ๋ ๋ณต์กํ ํ๋ฆ์ ๊น์ด๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. LBV๋ ์ด๋ํ ์์น๋ฅผ ๋ช ์์ ์ผ๋ก ๋ํ๋ด๋ฏ๋ก ํ๋ฆ์ ์ ์ดํดํ ์ ์๋๋ก ํ๊ธฐ ๋๋ฌธ์ LBV๋ ์ฝ์ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋์ฒด๋ก LBV๋ ๋ฌธ์ ๊ฐ ๊ฐ์ฅ ์ ์ ๋ช ๋ นํ ์ ์ด ํ๋ฆ ์ค ํ๋์ ๋๋ค.
'a: for _ in 0..1 { break 'a }
'a: { ... break 'a e; ... }
์ด๊ฒ๋ค์ ๋น์ทํด ๋ณด์ด์ง๋ง ์์ ํ ๊ฐ์ง๋ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ ํ๋ฆผ์์ด ๋ฐํจํด์ด์ง๋ง ๋ ๋ฒ์งธ๋ ํ๋ฆผ์์ด ์๋๋๋ค.
loop {}
๋ while true {}
์ ๋น์ทํฉ๋๋ค( loop
๋ ๊ฐ์ ๋ฐํํ ์ ์์ง๋ง while
๋ ๋ฐํํ ์ ์์ง๋ง ์ ์ ๋ฌด์ํฉ์๋ค)
@nrc ๊ทธ๋๋ ๋์ผํ ๋์์ ์์ต๋๋ค. https://github.com/rust-lang/rust/issues/48594#issuecomment -450246249
ํนํ break;
๋ฐ continue;
์ ๋ค๋ฆ
๋๋ค. ๋ค์ ๊ฐ์ ์ฝ๋๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
some_macro! {
...
break;
...
}
some_macro
๊ฐ 'a { ... }
ํ์ฅ๋๋ฉด 'a: for _ 0..1 { ... }
ํ์ฅํ ๋์ ๋ค๋ฅธ ๋์์ ํฉ๋๋ค.
@SoniEx2
๋๊ตฌ๋ ์ง ๋๋ฆฌ๊ณ ๋ ์ง๊ด์ ์ด๋ฉฐ ๋ ์ธ์ฒด ๊ณตํ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ค์ ์์ฑํ๋ ค๊ณ ์๋ํ ์ ์ด ์์ต๋๊น?
์ข ๋ ๊ธ์ ์ ์ด๊ณ ์์ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํต์ ์ ์๋ํ์ญ์์ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ์กฐ๋กฑํ๋ ๊ฒ์ ์ฐ๋ฆฌ๋ฅผ ์ด๋์๋ ๋ฐ๋ ค๊ฐ์ง ์์ผ๋ฉฐ ์ฌ๋๋ค์ ๊ธฐ๋ถ ๋์๊ฒ ๋ง๋ญ๋๋ค. ์ฐ๋ฆฌ๋ Rust๊ฐ ๊ฐ๋ฅํ ์ต๊ณ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํ์ธํ๊ณ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ๋ฅํ ํ ๊ธ์ ์ ์ด๊ณ ๊ณ ๋ฌด์ ์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ฌ๊ธฐ ์์ต๋๋ค.
์๋ง๋ ๋ด๊ฐ ํฐ ์คํด๋ฅผ ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ LLVM, Rust์ ๋ด๋ถ ๋๋ ์ด์ ์ ์ฌํ ๊ฒ๋ค์ ์ ๋ฌธ๊ฐ์ธ ์ฒํ์ง ์์ ๊ฒ์ ๋๋ค. ์ฆ, ์ปดํ์ผ๋ฌ ์ค๊ณ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฒฝํ์ด ์์ผ๋ฉฐ ์ฐ๋ ค ์ฌํญ์ด ๋ฌด์์ธ์ง ํผ๋์ค๋ฝ์ต๋๋ค. ๋๊ตฐ๊ฐ ์ค๋ช ํ ์ ์๋ค๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ด๊ฐ ์ฌ๋ฌผ์ ๋ณด๋ ๋ฐฉ์:
1) ์ด๊ฒ์ ํ๋ฆ ์ ์ด์ ์ธ์ฒด ๊ณตํ์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. 'a: loop { if x { break 'a; } break; }
์ ๊ฐ์ Rust์๋ ์ด๋ฏธ ์ด์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ์กด์ฌํฉ๋๋ค.
2) ์ด๊ฒ์ ํนํ ๋ธ๋ก ๋ฐํ์ ์ธ์ฒด ๊ณตํ์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ๋ฃจํ๋ ์ด๋ฏธ ๊ฐ์ ๋ฐํํ ์ ์์ต๋๋ค.
๋์๊ฒ ์ด๊ฒ์ Rust๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ง๊ด์ ์ผ๋ก ์์ฑํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ชจ๋ (๋๋ ์ ์ด๋ ๋ ๋ง์) ๋ธ๋ก์ ๋ํด ์ผ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ด goto
์ ๋๋ฌด ์ ์ฌํ๋ค๋ ์ ์์ ์ ๋ ๋ ํผ๋์ค๋ฝ์ต๋๋ค. ์ด๊ฒ์ Rust์์ ์ด๋ฏธ ๊ฐ๋ฅํ์ง ์์ ๊ฒ์ ์ถ๊ฐํ์ง ์์ผ๋ฉฐ ์ญ๋ฐฉํฅ ์ ํ( goto
๊ฐ ์คํ๊ฒํฐ ์ฝ๋๋ก ํ๊ทํ๋ ์๋ชป๋ ์ฌ์ฉ์ ์ด๋ํ๋ ์ฃผ์ ๋ฌธ์ )๋ฅผ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ์คํจํ๊ณ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ด codegen์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ ์๋์ง ์ดํดํ๋ ค๋ฉด ์ด๊ฒ์ด ํญ์ ์ค๋จ๋๋ ๋ฃจํ์ ๋ํ ๊ตฌ๋ฌธ ์คํ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ค ๋ฌธ์ ๊ฐ ์๋์ง ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํด์ค ์ ์๋ ์ฌ๋์ด ์์ต๋๊น?
์ ์ฐจ์ IMO concern blocking
๋๋ concern should-close-not-merge
์คํ์ผ ๋ฌธ์ ๋ฅผ ์ ์ถํ๋ ๊ฒ์ ์ ์ ํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ ์๋ ๊ธฐ๋ฅ์ ๋ฌธ์ ๋ ํด๊ฒฐ์ ์ํด ๋
ธ๋ ฅํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋์ดํ์ง ์์ต๋๋ค. - ๊ทธ๋ฅ ์๊ตฌ ์ฐจ๋จ์
๋๋ค. ๋๋ rfcbot์ ์ฐ๋ ค ๋ฉ์ปค๋์ฆ์ด ๊ธฐ๋ฅ์ ์๊ตฌ ์ฐจ๋จํ๋ ๋ฐ ์ฌ์ฉ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋จ์ง ์ฐ๋ ค์ ํด๊ฒฐ์ ์ถ์ ํ๊ณ ์ ์ ํ๊ฒ ํด๊ฒฐ/ํด๊ฒฐ๋๋๋ก ํ๋ ๋ฐ ๋์์ด ๋ ๋ฟ์
๋๋ค. ํ๋ก์ธ์ค์ ๋ํ ๋์ ์ดํด๋ ์ฒดํฌ๋์ง ์์ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋์ํ์ง ์์์ ํ์ํ๋ ๊ฒ์ด๋ฉฐ ์ฐ๋ ค ์ฌํญ์ ๊ธฐ๋ฅ ๋ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ํด ๋
ผ์ํ ์ ์๋ ํน์ ๋ฌธ์ ๋ฅผ ์ ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ค๋ ๊ฒ์
๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋์ํ์ง ์๋ ๋ค๋ฅธ ๊ธฐ๋ฅ(์: uniform_paths ์ฐธ์กฐ)์ ๋ํด ์ ์ฌํ "๋๋ ์ด๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค" ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ์ ์์์ง๋ง, ๋๋ ๋ฌดํ ํ๋ฆฌ๋ฒ์คํฐ๊ฐ ์ธ์ด ๋์์ธ์ ์ํํ๋ ์์ฐ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋ฏฟ์ง ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ด ๋
ผ์/ํด๊ฒฐ๋์ด์ผ ํ๋ ์ธ์ด์ ๋ค๋ฅธ ๋ถ๋ถ๊ณผ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๋ํ ํน์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ(์: " try { ... }
๋ก ์ ๊ฑฐํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. " ๋๋ " ๊ด์ฉ์ ์ผ๋ก ํฐ ๊ธฐ๋ฅ") ๊ทธ๋ฐ ์์ผ๋ก ํ์ผ์ ์ ์ถํ๋ ๊ฒ์ด ๋ ์์ฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@cramertj @Centril ์ด ๋ช ์์ ์ผ๋ก ์ ์ํ์ง ์์๋ค๋ฉด ๊ทธ๋ฐ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ง ์์์ ๊ฒ์ ๋๋ค. (๊ฐ์ธ์ ์ผ๋ก FCP๊ฐ ์ ์๋์ง ์์๋๋ผ๋ฉด ๋ ์ข์์ ๊ฒ์ ๋๋ค.)
๋น์ ์ ๋๊ตฐ๊ฐ๊ฐ "๊ฐ๊น์ด"์ด์ธ์ ๋ญ๊ฐ๋ฅผ rfcbot์ P-FCP์ ์ ๊ธฐ ํ ๊ฒฝ์ฐ, "์ด ํ์ํด์ผํ๋ค"์ ํด๋นํ๋ ๊ณผ์ ์ผ๋ก ์ด๋ค ์ ์? "์ ์ ํ๊ฒ ํด๊ฒฐ/ํด๊ฒฐ๋์๋์ง ํ์ธํ์ญ์์ค"๋ "์ธ์ ๊ฐ ์์ ํ๋ ๊ฒ์ ๋๋ค. ๊ฑฐ๊ธฐ์ ๋๋ฌํ๋ ค๋ฉด ๋ฌด์์ด ํ์ํฉ๋๊น?"์ ๋์ผํ๊ฒ ๋ค๋ฆฝ๋๋ค. "์ด๊ฒ์ ๊ฒฐ์ฝ ์์ ํ๋์ด์๋ ์๋๋ฉฐ ์ธ์ด์ ์ผ๋ถ๊ฐ๋์ด์๋ ์๋ฉ๋๋ค"๋ผ๋ ํ๋ฆ์ ๊ฒฝ๋ก๋ฅผ ๋จ๊ธฐ์ง ์์ต๋๋ค.
ํ๋ก์ธ์ค์ ๋ํ ๋์ ์ดํด๋ ์ ํ๋์ง ์์ ํ์ธ๋์ ์ฌ์ฉํ์ฌ ๋์ํ์ง ์์์ ํ์ํ๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ณ์ ์งํํ๋ ค๋ฉด ๋ชจ๋ ํ์ธ๋์ ์ ํํ๋๋ก ํ๋ก์ธ์ค๋ฅผ ๋ค์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
๋๋ ๋ฌดํ ํ๋ฆฌ๋ฒ์คํฐ๊ฐ ์ธ์ด ๋์์ธ์ ํ๋ ์์ฐ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋ฏฟ์ง ์์ต๋๋ค.
์ ๋ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ ์ด ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์๋ ๊ธธ์ ์ฐพ๊ณ ์ถ์ต๋๋ค. ๋ค๋ง ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฒฐ๋ก ์ด ๋ฌ์ผ๋ฉด ํ๋ ๋ฐ๋์ ๋๋ค.
๊ธฐ๋ก์ ์ํด ์ด RFC์ ๋ํ ๊ฒฝํ์ ๋ฐํ์ผ๋ก "์์ ํ ์ค์ ๊ณ์ ์งํํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ํ๊ฐ/์ฒ๋ฆฌํ ์ ์์ต๋๋ค"๋ผ๋ ๊ฒฝ๊ณ ๋ก RFC์ ๋ค์ ์๋ตํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ด์ ๊ฐ์ ์ค์ํ ์ ์ฐจ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
"์, ์ด ๊ฐ๋ณ ๊ธฐ๋ฅ์ด ์ธ์ด๋ฅผ ๋ ํํ๋ ฅ ์๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ง๋ง ์ธ์ด์ ์ ๋ฐ์ ์ธ ํ๊ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด ๋ฌด๊ฒ๋ฅผ ์งํฑํ์ง ์์ผ๋ฉฐ ๋ ์ด์ ํ์ฅํ๊ณ ์ถ์ง ์์ต๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ธ์ด์ ํ๋ฉด์ ". ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ด๋ค ํํ๋ก๋ ๋ถ๊ฐํผํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ณ ๋ฐ๋๋ฅผ ์ง์ํ๊ณ ์ง์ํ๋ ๋ฌธ์ ๋ก ๋ณด์ด์ง ์๋๋ก ์ ๊ธฐ์ ์ผ๋ก ์ ํ๋ฅผ ๊ฑธ์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์น ๊ฒ ๊ฐ์์ ์ด์ ์ ๋งํ ๊ฒ์ ๋ฐ๋ณตํ๊ฒ ์ต๋๋ค. https://github.com/rust-lang/rust/issues/48594#issuecomment -451795597
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ธ๋ ์ดํน ๋ธ๋ก์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐจ์ด์ ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค.
์ฃผ๋ก, ์ฐจ๋จ ๋ธ๋ก์ ๋ค๋ฅธ ๊ตฌ๋ฌธ, (์ฝ๊ฐ) ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ(์ ์ด๋ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ์ค๋จ๊ณผ ๊ด๋ จํ์ฌ) ๋ค๋ฅธ ์๋๋ฅผ ์๋ฏธํ๋ฉฐ ๋ช ๊ฐ์ง ๊ธฐํ ์ฌ์ํ ์ฌํญ์ ์๋ฏธํฉ๋๋ค.
rfcbot์ anticoncerns๋ฅผ ์ง์ํฉ๋๊น?
@joshtriplett
"์, ์ด ๊ฐ๋ณ ๊ธฐ๋ฅ์ด ์ธ์ด๋ฅผ ๋ ํํ๋ ฅ ์๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ง๋ง ์ธ์ด์ ์ ๋ฐ์ ์ธ ํ๊ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด ๋ฌด๊ฒ๋ฅผ ์งํฑํ์ง ์์ผ๋ฉฐ ๋ ์ด์ ํ์ฅํ๊ณ ์ถ์ง ์์ต๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ธ์ด์ ํ๋ฉด์ ". ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ด๋ค ํํ๋ก๋ ๋ถ๊ฐํผํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ณ ๋ฐ๋๋ฅผ ์ง์ํ๊ณ ์ง์ํ๋ ๋ฌธ์ ๋ก ๋ณด์ด์ง ์๋๋ก ์ ๊ธฐ์ ์ผ๋ก ์ ํ๋ฅผ ๊ฑธ์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์, ๊ธฐ๋ฅ์ ์๋ฝํ๊ฑฐ๋ ๊ฑฐ๋ถํ๋ ค๋ฉด ํด๋น ํ์ ์์ ํ ํฉ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ํ์ฌ ํ๋ก์ธ์ค์ ๋ถํํ ์ํ์ ๋๋ค. lang ํ์ด ์ง๊ธ๋งํผ ํฌ๋ฉด ํญ์ ์ด๊ฒ์ ๋ฌ์ฑํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์์ ๋๊ธ์์ ์ด ๊ธฐ๋ฅ์ด ์ ์ค์ํ์ง ๋๊ธฐ๋ฅผ ๋ถ์ฌํ๋ ์ฝ๋ ์์ ๊ฐ ๋๋ฝ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ์ด์ ๋ ๊ฑฐ๊ธฐ์ ๋์ํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ ์ ์์ฑํ ์ ์๋ ์ฝ๋์ด์ง๋ง ์ฌ๊ธฐ์์ ๋ณผ ์ ์๋ ๋น์ฉ์ ๊ฐ์น๊ฐ ์๋์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค. ๊ณ์ํด์ ์์ ๋ฅผ ์ ๊ณตํ๋ ๊ฒ(๋ง ๊ทธ๋๋ก ๋ค๋ฅธ ์คํ์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๋งคํฌ๋ก ์์ ํฌํจ)๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ฌ๋ก๊ฐ ์ถฉ๋ถํ ๋๊ธฐ ๋ถ์ฌ๋ผ๊ณ ํ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ ์ฌํ๊ฒ, ๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ด ๋ณํฉ๋์ด์ผ ํ๋ค๊ณ ํ์ ํ ๊ฒ์ด๋ผ๊ณ ์๋นํ ํ์ ํฉ๋๋ค. IMO๋ ๊ทธ๊ฒ์ด ์ต๊ณ ์/์ ์ผํ ์ต์ ์ธ ๋ค์ํ ์๋ฅผ ํตํด ๊ทธ ๋ฌด๊ฒ๋ฅผ ๋์ด๋ผ ๋ฟ๋ง ์๋๋ผ ์ธ์ด๊ฐ ์ค์ ๋ก ์ถ๊ฐ๋์ด ๋ ๊ฐ๋จํฉ๋๋ค. (๋ผ๋ฒจ์ด ๋ถ์ ๋ธ๋ก์ ํ์ฉ ํ์ง ์๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋ผ๋ฒจ์ด ๋ถ์ ๊ตฌ์ฑ์ ํ์ฉํ๋ค๋ ์ ์์ ๋๋์ต๋๋ค.)
์์ ์์ฝ๋ ๊ทํ์ ์ ์ฅ์ ๋์ํ์ ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ๋ถ์กฑํ ๋ถํํ(๋ด ์๊ฐ์๋ ์ญ์ฌ์ ์ผ๋ก!) ๊ณค๊ฒฝ์ ์ฒํด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ ๊ฐ์ง ์ต์ ์ ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ํ์ฌ rfcbot ๊ท์น์ ํด์ํ๋ ๊ฒ์ ๋๋ค. "ํ์ธ๋์ด ์์ผ๋ฉด ๋์ํ์ง ์๋๋ค๋ ์ ํธ๊ฐ ํ์๋ฉ๋๋ค. ๋๋ค์๋ฅผ ๋ฌดํจํํ๋ ค๋ฉด 3๋ช ์ ๊ตฌ์ฑ์์ด ํ์ํฉ๋๋ค." ๋๋ ๋น์ ์ด ์ด ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค๊ณ ์ ์ํ ๊ฒ์ด ์ ์งํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ์ ์น์ธ๋->๊ตฌํ๋->์์ ํ๋ ๊ธฐ๋ฅ์ ๋ํ ์๊ฐ ์ ํ์ ๋์ ํ ์ ์๊ณ ๊ณ์ ์ฆ๊ฐํ๋ ๋ฐฑ๋ก๊ทธ๋ฅผ ํผํ๊ธฐ ์ํด ๋ค์ณ์ง๋ ๊ธฐ๋ฅ์ "์๋ ์ข ๋ฃ"ํด์ผ ํ๋ค๋ ์ ์์ ๋ค์์ต๋๋ค. ๊ทธ์ ๊ฐ์ ๊ฒ์ด ์ด ๊ฒฝ์ฐ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ (๊ทธ๋ฆฌ๊ณ ์ ์๊ฐ์ ํ์ ๋ค๋ฅธ ์ฌ๋ฌ ์ฌ๋)๋ ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ซ์ง ์๊ณ ์๋ฝํ ์ฒดํฌ๋ฐ์ค๋ฅผ ํ์ํ์ง ์์ ๊ฒ์ ๋๋ค(๋๋ ์ง๊ธ๋ ์ด๋ ๊ฒ ๋งํ๋ ๊ฒ์กฐ์ฐจ ๋๋ ต์ต๋๋ค. m ๋น์ ์ ์ค๋ํ๊ธฐ ์ํด ์ตํ์ ๋ ธ๋ ฅ์ ๋ฒ๋ฆฌ๊ณ ์์ต๋๋ค! :์ค๋ง์ผ:).
๋๋ ๊ณ์ํด์ ์ฑ์ฅํ๋ ํ๊ณผ ํจ๊ป ๊ธฐ๋ฅ์ ๋ํ ํฉ์์ ๋๋ฌํ๋ ๋ฅ๋ ฅ์ ์์ ๊ฒ์ด๊ณ , ํนํ lang-design ํ์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ธ์ด๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ๊ฑฑ์ ํฉ๋๋ค. ํ ํฌ๊ธฐ ์ ํ์ ์ด์ ๋ํ ๋ช ๋ฐฑํ ํด๊ฒฐ์ฑ ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ง์ ์ฌ๋๋ค์ ์๊ฒฌ์ ๋ฐ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ์ถฉ๋ถํ ํฐ ๊ทธ๋ฃน ๊ฐ์ ์ ๋์ ์ธ ํฉ์๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ ผ์์ ์ฌ์ง๊ฐ ์๋ ๊ธฐ๋ฅ์ด ์๋ชป๋ ๊ธฐ๋ฅ์ผ๋ก๋ถํฐ ์ธ์ด๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๋ณํฉ๋์ด์๋ ์ ๋๋ค๊ณ ์ฃผ์ฅํ ๊ฒ์ ๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ปค๋ฎค๋ํฐ๊ฐ ์ ์ ํ ๊ฒฝ๊ณ ์์ด ๋ง์ ์ค์๋ฅผ ์ ์ง๋ฅด๋๋ก ๋ด๋ฒ๋ ค ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๊ทธ๊ฒ์ ์๊ฐ์ ๋๋ค.
๋๋ ์ฌ๊ธฐ์์ ํ๋ก์ธ์ค ์งํ์ ๋ํด ๋ ผ์ํ๊ธฐ ์ํด ๋ณ๋์ ์ค๋ ๋๋ฅผ ์์ํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ด๋ฉฐ, ๊ทธ ๋์ ์ด ์ค๋ ๋์ ๊ด์ฌ์ ๊ฐ๊ณ ์๋ ์ฌ๋๋ค์ด ๋ค์๊ณผ ํ์ ํ๊ฒ ๋ค๋ฅธ ๊ณ ๋ คํด์ผ ํ ์๋กญ๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๊ฒ์ํ ๊ฒ์ ์์ฒญํฉ๋๋ค. ๋๋ ์ด ๊ธฐ๋ฅ์ด ์ธ์ด์ ์ถ๊ฐ๋์ด์๋ ์ ๋๋ ์ค๋ํ ๊ณ ๋ ค๋์ง ์์ ์ด์ ๊ฐ ์๋ ๊ฒฝ์ฐ. ์ด๋ฌํ ๋ฉ๊ฐ ์ค๋ ๋์ ์ ์ฒด ๊ธฐ๋ก์ ์ฝ๋ ๊ฒ์ ์ด๋ ต์ง๋ง ๊ฒ์๋ฌผ์ด ๊ณ์ํด์ ๋ฐ๋ณต๋๊ฑฐ๋ ์ค๋ ๋๊ฐ ๋์์ด ๋์ง ์๋ ๋๊ธ๋ก ์ฑ์์ง๋ฉด ๋์ฑ ๊ทธ๋ ์ต๋๋ค. (๊ทธ๋ ์ด์ ์ ์ฒด ์ค๋ ๋์์ ๊ฐ์ฅ ๊ธด ์ฃผ์ ์ค ํ๋๋ฅผ ์ ๋ ฅํ๋ค๊ณ ๋งํฉ๋๋ค XD)
TL;DR: ์ฐ๋ฆฌ๊ฐ ๊ฐํ ๊ฒ ๊ฐ์์. ์ด์ ๋ํ ํ๋ก์ธ์ค๊ฐ ์์ด์ผ ํฉ๋๋ค. ๊ทธ ๋ํ๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์์ํ๊ณ ์ฌ๊ธฐ์ ๋งํฌํ๊ฒ ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์ ์ ๋ณด๊ฐ ์๋ ํ ๋๊ธ์ ๋ฌ์ง ๋ง์ญ์์ค.
@cramertj
๊ธฐ๋ฅ์ ์๋ฝํ๊ฑฐ๋ ๊ฑฐ๋ถํ๋ ค๋ฉด ํด๋น ํ์ ์์ ํ ํฉ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ํ์ฌ ํ๋ก์ธ์ค์ ๋ถํํ ์ํ์ ๋๋ค.
๋๋ ์์งํ ๊ทธ๊ฒ์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ ์๊ฒฌ์์ ์ด ๊ธฐ๋ฅ์ด ์ ์ค์ํ์ง ๋๊ธฐ๋ฅผ ๋ถ์ฌํ๊ธฐ ์ํ ์ฝ๋ ์์ ๊ฐ ๋๋ฝ๋์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ ์ ์์ฑํ ์ ์๋ ์ฝ๋๊ฐ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง ๊ฐ์น๊ฐ ์๋์ง ํ์ ํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์ ํ์๋๋ ๋น์ฉ.
๋๋ ์ฌ์ ํ ๋ง์ ์์ ๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์์ฑ ์ ์๋ ์์ ๋ฅผ ๋ ๋ง์ด ๋ณผ์๋ก ์ด ๊ธฐ๋ฅ์ด ๋จ์ํ ์ธ์ด์ ๋ค์ด๊ฐ์ง ์์์ผ ํ๋ค๋
(๋ํ ๊ฐ์น๊ฐ ์ฃผ๋ชฉํ : @nrc์ ์์ proc-macro-rules
์ฌ์ฉ๋๋ label_break_value
๊ทธ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ค์ ์์ฑ๋์์ต๋๋ค ๊ฒ ๊ฐ์ต๋๋ค.)
ํ ๊ฐ์ง ์ต์ ์ ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ํ์ฌ rfcbot ๊ท์น์ ํด์ํ๋ ๊ฒ์ ๋๋ค. "ํ์ธ๋์ด ์์ผ๋ฉด ๋์ํ์ง ์๋๋ค๋ ์ ํธ๊ฐ ํ์๋ฉ๋๋ค. ๋๋ค์๋ฅผ ๋ฌดํจํํ๋ ค๋ฉด 3๋ช ์ ๊ตฌ์ฑ์์ด ํ์ํฉ๋๋ค." ๋๋ ๋น์ ์ด ์ด ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค๊ณ ์ ์ํ ๊ฒ์ด ์ ์งํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด "๊ธฐ๊ถ"์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ ์ฐจ๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ฐ๋ํ๋ ๊ฒ์ ์๋๋๋ค.
IMO๋ ์ต๊ณ ์/์ ์ผํ ์ต์ ์ธ ๋ค์ํ ์๋ฅผ ํตํด ๋ฌด๊ฒ๋ฅผ ๋์ด์ฌ๋ฆด ๋ฟ๋ง ์๋๋ผ ์ถ๊ฐ๋ก ์ธ์ด๊ฐ ์ค์ ๋ก ๋ ๊ฐ๋จํฉ๋๋ค(๋ค๋ฅธ ๋ ์ด๋ธ์ด ์ง์ ๋ ๊ตฌ์ฑ์ ํ์ฉํ๋ ๊ฒฝ์ฐ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ธ๋ก์ ํ์ฉํ์ง ์๋ ๊ฒ์ด ๋๋๊ธฐ ๋๋ฌธ์ ๋๋ค).
๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ง๊ต์ฑ ์ธ์๊ฐ ๋งค๋ ฅ์ ์ด๋ผ๊ณ โโ์๊ฐํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์ธ์ด์ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ฃจํ ๋ธ๋ ์ดํฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ ํธํ๊ธฐ ๋๋ฌธ์ ํนํ ์ด ์ธ์๋ ์ค๋๋ ฅ์ด ์์ต๋๋ค.
๋๋ ๊ณ์ํด์ ์ฑ์ฅํ๋ ํ๊ณผ ํจ๊ป ๊ธฐ๋ฅ์ ๋ํ ํฉ์์ ๋๋ฌํ๋ ๋ฅ๋ ฅ์ ์์ ๊ฒ์ด๊ณ , ํนํ lang-design ํ์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ธ์ด๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ๊ฑฑ์ ํฉ๋๋ค.
์กฐํฅ๋ฟ ์๋๋ผ ์ ์ง๋ ๊ฑฑ์ ์ ๋๋ค. ํ๋ก์ธ์ค๊ฐ "์"๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐ ์ด์ ์ ๋ง์ถ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ํ๋ฆ๋์ "์๋์", "์์ง์ ์๋"์ผ๋ก ์ด์ด์ง๋ ๊ทธ๋ํ ๊ฐ์ฅ์๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ๋ ๋ฐ์ํ๋ ํน์ ๋ถ๊ฐํผ์ฑ์ด ์์ต๋๋ค.
2018๋ ๊ณผ 2019๋ ์ ์ธ์ด์ ๊ธฐ๋ฅ ์ฑ์ฅ์ ๋ํด ๋ง์ ๊ฒ์๋ฌผ์ด ์์ฑ๋์์ผ๋ฉฐ ์ธ์ด ํ์์ ์ธ์ด์ ์ ์ฒด ํ๋ฉด์ ์ ๋ํด ์ง์งํ๊ฒ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ํ๋๋ก ์ฅ๋ คํ๋ ์ข์ ํ๋ก์ธ์ค๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@joshtriplett
์ด๊ฒ์ ์ธ์ด์ ํํํ ์ ์๋ ํํ๋ ฅ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
๋งค์ฐ ๋ช
ํํ๊ธฐ : ์ ํํ ์ด๋ ๊ฒ ์์ต๋๋ค. ํ์ฌ ๋ค๋ฅธ ์ ์ด ํ๋ฆ ๊ตฌ์ฑ์ ๋ฐฉํดํ์ง ์๋ ์ด ์ฝ๋๋ฅผ ํํํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ค๋ฅธ ์ ์ด ํ๋ฆ ๊ตฌ์ฑ์ ๋งคํฌ๋ก์์ ํนํ ๋ฐ๋์งํฉ๋๋ค. ์ด ๊ตฌ์ฑ์ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ์ค๋จ์ ํตํด ํ๊ฒํ
ํ ์ ์๋ ์ ์ผํ ๊ตฌ์ฑ์ด ๋ฉ๋๋ค. ๋งคํฌ๋ก ์์ฑ์๊ฐ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ break
์ ๊ฒน์น ์ํ ์์ด ์น์
์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
๋ํ ์ง๊ทธ์ฌ๊ทธ๋ก ๋๋ฌ์ธ๊ฑฐ๋(๋ ์ด๋ธ์ด ์ ํ ์๋ ๊ฒฝ์ฐ - Lua ์์ ์ฐธ์กฐ) ๋ฃจํ๋ก ์ด์ํ ์์ ์ ์ํํ ํ์๊ฐ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ ๋ํ llvm์ด ์ง๊ทธ์ฌ๊ทธ ์ฝ๋๋ฅผ ์ต์ ํํ ์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ด์ ์ด ์์ต๋๋ค.
@joshtriplett
๋๋ ์ฌ์ ํ ๋ง์ ์์ ๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์์ฑ๋ _์๋_ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ธ์ด์ ํํํ ์ ์๋ ํํ๋ ฅ์ ์ถ๊ฐํ์ง ์์ต๋๋ค. ๋๋ ์๋ ์ถฉ๋ถํ ์์ ๋ก ๋๊ธฐ๋ฅผ ๋ถ์ฌํ ์ ์๋ค๊ณ ๋๊ผ์ง๋ง ์ด ๊ธฐ๋ฅ์ _ํ ์ ์๋_ ์์ ๊ฐ ๋ง์์๋ก ์ด ๊ธฐ๋ฅ์ด ๋จ์ํ ์ธ์ด์ ํฌํจ๋์ด์๋
์ฐ๋ฆฌ๊ฐ ํํค์น ์ ์๋ ๊ฒ์ด ์๋๊น์?
๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ง๊ต์ฑ ์ธ์๊ฐ ๋งค๋ ฅ์ ์ด๋ผ๊ณ โโ์๊ฐํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์ธ์ด์ ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ฃจํ ๋ธ๋ ์ดํฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ ํธํ๊ธฐ ๋๋ฌธ์ ํนํ ์ด ์ธ์๋ ์ค๋๋ ฅ์ด ์์ต๋๋ค.
์ด ์ถ๋ก ๋ผ์ธ์ด ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(ํ์ผ๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ ๋ฃจํ ์ค๋จ์ ์ ๊ฑฐํ์ง ์์ผ๋ ค๋ ๊ฒฝ์ฐ ์ ์ธ). ์ธ์ด์ ์์์ผ๋ฉด ํ๋ ๋ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์์ธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ์ ์ ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฑฐ๊ธฐ์ ์์ผ๋ฏ๋ก ์ด ์ถ๊ฐ๊ฐ ๊ทธ๊ฒ๊ณผ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ด๊ฐ Rust์ ๋ํด ๋ค๋ฅด๊ฒ ํ์ ์ ์๋ ๋ง์ ์ผ์ด ์์ง๋ง, ํด์๋ ์ ๋๋ฉฐ ํด์๋ ์ ๋ฉ๋๋ค.
์กฐํฅ๋ฟ ์๋๋ผ _์ ์ง_์ ๋ํด์๋ ๊ฑฑ์ ํฉ๋๋ค. ํ๋ก์ธ์ค๊ฐ "์"๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐ ์ด์ ์ ๋ง์ถ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ํ๋ฆ๋์ "์๋์", "์์ง์ ์๋"์ผ๋ก ์ด์ด์ง๋ ๊ทธ๋ํ ๊ฐ์ฅ์๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ๋ ๋ฐ์ํ๋ ํน์ ๋ถ๊ฐํผ์ฑ์ด ์์ต๋๋ค.
Not yet์ yes ์์ด๋ ์์ ํ๋์ง ์๋๋ค๋ ์๋ฏธ์์ "no"์ ์์ฒด ํํ์ ๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ ๋ชจ๋์๊ฒ LBV๊ฐ ๋์ ์๊ฐ์ด๋ผ๋ ๊ฒ์ ๋ฉ๋์ํค์ญ์์ค / X, Y, Z ์ด์ ๋ก ์ถฉ๋ถํ ๋๊ธฐ๊ฐ ๋ถ์ฌ๋์ง ์์์ต๋๋ค. ๋๋ ์์ง๊น์ง ๊ทธ๋ฌํ ๊ตฌ์ฒด์ ์ธ ์ฃผ์ฅ์ ๋ง์ด ๋ค์ด๋ณธ ์ ์ด ์๋ค. ๋น์ ์ ๋ํ ๋ถ๊ฐํผํ ๊ฒ์ด ์๋ค๋ ๊ฒ์ ์ฌ๊ธฐ์์ ๋ถ๋ช ํ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
2018๋ ๊ณผ 2019๋ ์ ์ธ์ด์ ๊ธฐ๋ฅ ์ฑ์ฅ์ ๋ํด ๋ง์ ๊ฒ์๋ฌผ์ด ์์ฑ๋์์ผ๋ฉฐ ์ธ์ด ํ์์ ์ธ์ด์ ์ ์ฒด ํ๋ฉด์ ์ _์ฌ๊ฐํ๊ฒ_ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ํ๋๋ก ์ฅ๋ คํ๋ ์ข์ ํ๋ก์ธ์ค๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๊ฐ์ธ์ ์ผ๋ก์ด ๊ธ์ ๋ง์ ๋ํด ํ๋ ๋๋ผ๋ ์ง์ ๊ฐ๋ฅ์ฑ (๊ทธ๋ฌ๋ @nikomatsakis์ด ...ํ๋๋งํผ ์ ์ ํ๊ฒ ํํ๋์ง ์์) ๋๋ ๋ง์ ์ฌ๋๋ค์ด ์ฆ, ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ ์ฒด์ ์ฌ๊ฐํ ๊ณ ๋ ค๋ฅผ ํ (์ธ์ด ํ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ์ง ์๋๋ค ํ๋ฉด์ ). Rust์ ์ ์ฒด ํ๋ฉด ๊ตฌ๋ฌธ์ ์๋ง๋ ์ค์ ๋ก ์๋ ์ ์ฑ์ฅํ ๊ฒ์ด ์๋๋ผ ์ค์ด๋ค์์ ๊ฒ์ ๋๋ค. LBV๋ ํฌ๊ฒ ์ฆ๊ฐํ์ง ์์ผ๋ฉฐ ์ค์ ๋ก ์ธ์ด์ ์์ฐ ์๋ฅผ ์ค์ด๊ณ ๊ตฌ๋ฌธ์ ๋ ๊ท ์ผํ๊ฒ ๋ง๋ ๋ค๋ ์ฃผ์ฅ์ด ์ ๊ธฐ๋ ์ ์์ต๋๋ค.
๋จ์ํ ๋ฌธ๋ฒ์ ๊ฒฐํฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ธ์ด์ ํ๋ฉด์ ์ ์ถ์ํ์ง ์์ต๋๋ค .
์ทจํ ์ ์๋ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ์ ์๋ฅผ ์ค์ด๋ ๊ฒ์ ํ๋ฆผ์์ด ์ธ์ด์ ํ๋ฉด์ ์ ์ถ์ํ๋ ๊ฒ์ ๋๋ค.
์ ๋ ์ด ํน์ ๊ธฐ๋ฅ์ด ์ด๋ ์ชฝ์ด๋ ์๊ด์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ ์ค๋ฆฝ์ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์๋ฅผ ๋ค์ด ์ธ์ด ๊ตฌ์ฑ์ ํตํฉํ๋ ๊ฒ(bool let, ๋๊ตฌ๋ผ๋?) ์ ํ๋ฉด์ ์ ์ถ์ํฉ๋๋ค.
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋งคํฌ๋ก๊ฐ ์๋ ๋ค์ค ํจ๋ฌ๋ค์ ์ธ์ด๋ผ๋ ์ ์์ Rust์ ์ ์ฌํ Common Lisp์๋ ์ด ๊ธฐ๋ฅ์ด ์์ต๋๋ค(์ด๋ฆ block
/ return-from
). ์ฌ๊ธฐ์์ ๋
ผ์๋ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ Common Lisp์์ ์ด ๊ตฌ์ฑ์ ๋งคํฌ๋ก๋ฅผ ์์ฑํ๊ณ ํ์ํ ์ ์์ ์ ๋๋ก ๋ณต์กํ ์ ์ด ํ๋ฆ์ ํํํ ๋ ์ข
์ข
์ ์ฉํฉ๋๋ค.
(block foo
(return-from foo "value"))
๋ด ์๊ฐ์ Common Lisp์์๋ ์ด ๊ธฐ๋ฅ์ด ์ฑ๊ณต์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๊ฑฐ๋ ๊ตฌํํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ธฐ๋ฅ์ ๋ํ ๋ํ์์๋ ๋์ค์ง ์์ต๋๋ค.
ํฌํจ์ด ์๋ค
early return from block โ exceptions โ call/cc
์๋ฅผ ๋ค์ด, Scheme์์ return-from
์ ๋ค์ ์๋ฎฌ๋ ์ด์
์ด ๊ฐ๋ฅํฉ๋๋ค.
(define call/cc call-with-current-continuation)
(define-syntax block
(syntax-rules ()
((_ label statements ...)
(call/cc (lambda (label) (begin statements ...))))))
(block foo
(display "Visible text")
(foo "value")
(display "Phantom text"))
Scheme์์ call/cc
๋ ๋
ผ๋์ ์ฌ์ง๊ฐ ์๋ ์ฑ๊ณต์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋๋ ์ด๊ฒ์ ํนํ ํฅ๋ฏธ๋กญ๊ฒ ์๊ฐํฉ๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ ์ ์์ผ๋ ค๋ฉด ๋จผ์ ๋์์ ๊ณต์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. call/cc
๋ฅผ ์ค์๋์ด๋ผ๊ณ ์๊ฐํด๋ ์ง์ ์ธ ์๋ฏธ์์ ์ธ์ด๋ฅผ ๋ ์ค์ง์ ์ผ๋ก ๋ง๋ค์๋ค.
Nemerle ์ธ์ด์๋ ๋ช
๋ช
๋ ๋ธ๋ก ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๋งค์ฐ ์ ์ฉํ๊ณ ํธ๋ฆฌํฉ๋๋ค.
return, break ๋ฐ continue ๋ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋งคํฌ๋ก๋ก ๊ตฌํ๋ฉ๋๋ค.
@jhpratt ๋ฌธ์ ์ ํ ๋ก ์ ์ฝ์ด๋ณด์ญ์์ค.
@Centril ์ ์ ์์์ ์ ๋ํ ๋ช ๊ฐ์ง ์๊ฒฌ์ ๋ฐ๋ณตํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ํด ๋ ผ์ํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ์๊ฐ์ ์ ์ํ์ต๋๋ค(์ผ๋ฐ์ ์ธ ๋ฃจํ ๊ด๋ จ ๋ฒ์ ๊ณผ ๋ฐ๋).
์ด์จ๋ ๋ฃจํ๋ ์ฌ๊ธฐ์์ ์ ์๊ฐ์ด ์๋๋๋ค. ๋ด๊ฐ try ๋ธ๋ก์ ๋ณผ ๋ "ํด๋ก์ ๋ฅผ ๋ง๋๋ ์๊ณ ๋ฅผ ๋ค์ด์ง ์๊ณ ๋ ์กฐ๊ธฐ ๋ฐํ์ผ๋ก ์งง์ ๋ก์ปฌ ๊ณ์ฐ์ ์์ฑํ ์ ์์ผ๋ฉด ์ ์ฉํ ๊ฒ"์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. try ๋ธ๋ก์ ๋ค์ ์ ํ๋ "impl Try๋ฅผ ๋ฐํํ๊ณ ์ถ์ต๋๋ค"์ ๋ํด ์๋ํ๋ฉฐ ์ด๋ค ์ข ๋ฅ์ ๋ ์ด๋ธ๋ ์ง์ํ์ง ์์ต๋๋ค.
์์ ๋ด์ฉ์ ์ด์ ๋ํ ์ ์ ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค. ์ ๋ ์กฐ๊ธฐ ๋ณต๊ท ์คํ์ผ์ ์ข์ํฉ๋๋ค. try {}
๋ธ๋ก์ ๋๋ถ๋ถ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง ๋ ์ด๋ธ์ ์ค์ ๋ก ์ง์ํ์ง ์์ต๋๋ค(์ค์ฒฉ ๋ธ๋ก์ ๋ํด try {}?
์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ํ์ํ์ง ์์). ๋น์ ์ ๋น์ ์ ์ ํ์ ์บ์น์ฌ์ด ์๋ ํน์ ๋ชจ๋๋ ํํ๋ก ์ฝ๋๋ค(์ ๊ณต๋ ์ฌ์ฉ ์ฌ๋ก์ ์ํด ์
์ฆ๋จ).
๋๋ ๋ํ ๋ ์ด๋ธ break/continue๊ฐ ์๋ ๊ฒ์ด ํนํ Rust์ ๊ฐ์ ๋ฐ๋ณต์๊ฐ ์๋ ๊ฒฝ์ฐ ๋งค์ฐ ๊ณ ํต์ค๋ฌ์ด C++์ ๋ํด ๋ช ๊ฐ์ง ๊ด์ฐฐ์ ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ด๋ถ ๋ฃจํ ์ธ๋ถ์ -UB goto
๋๋ ๋ก์ปฌ break
ํ๋ฌ์ค ์กฐ๊ฑด๋ถ continue
์์ด ๋ด๋ถ ๋ฃจํ์์ ์ธ๋ถ ๋ฃจํ๋ฅผ ๊ณ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ ์ด๋ C์์ + + ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ์์ ๋ถ์กฑ์ ๋ ๊ณ ํต์ค๋ฌ์ด ์ธ๋ผ์ธ ๋๋ค ํธ๋ฆญ ์๋, ํจ๊ณผ์ ์ผ๋ก ์ง์ LVB๋, ์ธ๋ผ์ธ ๋๋ค์ ๋ฐํ ์ดํ LLVM์ inliner์ ์ํด LVB ๊ฐ์์ผ๋ก ์ ํ๋ฉ๋๋คํ๋ค. ์ด์ ๊ฐ์ ๊ฒ์... Rust์์ ํจ์ฌ ๋ ์์ฌ์ค๋ฝ์ต๋๋ค.
๋๋ ๋ํ ์ด ๊ธฐ๋ฅ์ด Go์ goto
ํํ๋ ฅ๊ณผ ๊ฑฐ์ ๋์ผํ๋ค๋ ์ ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ปดํ์ผ ํ์์ด ์ ์ธ ๋ฐ ๊ธฐํ ์ฌํญ์ ๊ฑด๋๋ฐ์ง ์๋๋ก ๊ฐ์ ํฉ๋๋ค(์์งํ Rob Pike๊ฐ goto
๊ฐ ํ์ฉ๋๋ค๊ณ ์๊ฐํ๋ค๋ฉด C++์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋
ธ๋ ฅํ ์ญ์ฌ, ๋๋ ๊ทธ๋ฅผ ์ด๋ ์ ๋ ์ ๋ขฐํ ๊ฒ์
๋๋ค.
๋ํ ์ ํ ๊ธฐ์ ์ ๋ํด ์์๋ณด๋ ค๋ฉด Kotlin ๋ return<strong i="24">@label</strong> expr;
ํ์์ผ๋ก ์ด ์ ํํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋๋ฒ๊ฑฐ๊ฐ break function:label
์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ c'ish ์ธ์ด์์ ๋๋ ๋ค์ด์ค๋ goto ์์ด๋ ๋ฃจํ์์ ์์ ์ ์ธ ์ค๋จ์ ์ ์์น๋ก ๋ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค.
ํด์์ ๋ํ ํฉ์๊ฐ ์๋๋ผ๋ ๋ ์ด๋ธ์ ์ข์ ์ ์์ต๋๋ค.
ํธ์ง: ํ ๊ฐ์ง ์ ์ฌ์ ์ธ ์ฅ์ ๋ฌผ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ์ด๋ธ์ด ๊ธฐํธ ๋ช
๋ช
๊ท์น์ ๋ฐ๋ฅธ๋ค๋ ๊ฒ์
๋๋ค. RFC๋ฅผ ์ดํดํ๋ฉด ์ด๋ฌํ ๋ ์ด๋ธ์ ๊ธฐํธ ์ด๋ฆ์์ '๊ฐ ์ ํจํ์ง ์์ ๊ธฐํธ ๋ช
๋ช
๊ท์น์ ๋ฐ๋ฅด์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Dwarf ๋๋ gdb ์์ฒด์์ ์ค์ ๋ก ์ด๋ค ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ํ์คํ์ง ์์ต๋๋ค.
ํธ์ง2:
์ผ๋ฐ์ ์ธ C ๊ธฐ๋ฐ ๋ ์ด๋ธ์ ์ธ์ฉ ๋์์ ์ดํด๋ณด๋ฉด ์ฝ๊ฐ์ ์ฐ๊ธฐ๊ฐ ์์์ด ํ์คํฉ๋๋ค.
๋๋ฒ๊ฑฐ์์ gdb๋ ๊ธฐํธ ์ด๋ฆ์ ์ผ๋ถ๊ฐ ์๋ ์ธ์ฉ์ ์ํด ์ต์ํ ๋ฐ์ดํ๋ฅผ ์ฒ๋ฆฌํ ๊ฒ์
๋๋ค. ๋ค์ ๊ฒฐ๊ณผ์์
0x401114์ ์ค๋จ์ 1: ํ์ผ
, 1ํ.
ํ์ ์ถ์ข ์ ๋ถํํ๋ ๊ฒฌ์
echo "void main() { } void hmm() { umm: return; }" | gcc -g -x c -;
gdb -ex "b hmm:'umm'" -ex "b hmm:'umm" -batch ./a.out
๊ทธ๋ฆฌ๊ณ ์ด ์ธ์ฉ์ด ๊ธฐํธ ์ผ์น ์ ์ ๋ฐ์ํ๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด gdb์ Rust ์ธ์ด ํน์ ์ง์์ ์ํด ์ํฅ์ ๋ฐ์ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
ํธ์ง: ์ฐ์ฃผ์ ์ ๊ธฐ์กด ๋ฃจํ ๋ ์ด๋ธ๋ก ์ธํด ์๋ง๋ ์ด๊ฒ์ผ๋ก ํญํดํ์ ๊ฒ์ ๋๋ค.
๋ธ๋ก์์ ์กฐ๊ธฐ ๋ณต๊ท๋ฅผ ์ ํธํ๋ ์ฌ์ํ ์ ์ ๊ฐ๋ํ ์ฌ๋์ ๊ณ์ฝ ํ๋ก๊ทธ๋๋ฐ์
๋๋ค. ํ๋๋ ์ฌ์ ๋ฐ ์ฌํ ์กฐ๊ฑด์ผ๋ก assert ๋ฌธ์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํธ์ํจ์ ์ ์งํ๊ธฐ ์ํด return
๋ฅผ break 'ret
๋ก ๋์ฒดํ์ฌ ์ด ๊ตฌ์ฑ์ ํ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
let value = 'ret: {
// ...
};
assert!(postcondition(value));
return value;
๊ทธ๋ฌ๋ return
๋ ๋ธ๋ก ๋ด๋ถ์์ ๊ธ์ง๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ถ์์ ํ ์๋ฃจ์
์
๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ํ์ง๋ง ์กด์ฌํ๋์ง ๋ชฐ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์์๋ค๋ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ "์ฌ๋๋ค์ด ์ผ๋ง๋ ์์์ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋์ง์ ์ํด ์ ์ฆ๋ ๋ฐ์ ๊ฐ์ด ๊ทธ๊ฒ์ ์ํ์ง ์๋๋ค"์ ๋ํ ๋ถ์ ์ ์ธ ์์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ค๋ ์์นจ์ IRLO์์ ๊ฐ๋ ์ ๋ ๋ฆฝ์ ์ผ๋ก
์ ๋ ์ค๋ ์ด๊ฒ์ผ๋ก ๋์๊ณ async
๋ธ๋ก์์ _๋งค์ฐ_ ํธ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฌ๋ try_blocks
๊ธฐ๋ฅ๊ณผ ๊ฒฐํฉํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
#![feature(try_blocks, label_break_value)]
fn main() {
let _: Result<(), ()> = try {
'foo: {
Err(())?;
break 'foo;
}
};
}
error[E0695]: unlabeled `break` inside of a labeled block
--> src/main.rs:6:20
|
6 | Err(())?;
| ^ `break` statements that would diverge to or through a labeled block need to bear a label
error: aborting due to previous error
try ๋ธ๋ก์ ์ค์์ ๋๋ค.
... ?
์์ฒด์ ๋ ์ด๋ธ์ ์ง์ ํ ์ ์์ต๋๊น? ( Err(()) 'foo?;
)
๋๋ try ๋ธ๋ก์ด ์ค์๋ผ๋ ๊ฒ์ ๊ฐ๋ ฅํ๊ฒ ๋์ํ์ง ์์ต๋๋ค. ๋น๋ก ๊ทธ๊ฒ์ ๋ณ๋์ ๋ ผ์์ด๋ฉฐ ์ฌ๊ธฐ์์ ์๋ค๋ก ๊ฐ ๊ฐ์น๊ฐ ์์ ๊ฒ์ ๋๋ค.
์ด ํน์ ์์ ์์๋ ์คํ ๊ฐ๋ฅํ์ง๋ง 'foo
์ ์๋นํ ์์ ์ฝ๋ ๋ฉ์ด๋ฆฌ์ ์ฌ๋ฌ ๊ฐ์ ?
๊ฐ ํฌํจ๋์ด ์๋ ์ค์ ์ฝ๋์ ๋น๊ตํ๋ฉด ๋งค์ฐ ์ต์ํ๋ฉ๋๋ค.
@SoniEx2
try ๋ธ๋ก์ ์ค์์ ๋๋ค.
์ด ๋๊ธ์ ๋ถ์ ์ ํฉ๋๋ค. @jonhoo ์ ์๊ฒฌ์ (์๋ง๋) ๋ฒ๊ทธ๊ฐ ์๋ ์ํธ ์์ฉ์ ๋ณด๊ณ ํ์ต๋๋ค. try
๋ธ๋ก(๋๋ label-break-value)์ ๋ํ ์๊ฒฌ์ ๊ด๊ณ์์ด ์ํํ๊ฒ ์ํธ ์ด์ฉ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ๋ถ๋ช
ํฉ๋๋ค.
Err(()) 'foo?;
๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
@jonhoo try
๊ฐ ์ด๋ป๊ฒ ๋์๊ฐ๋ง ๋๋์ง์ ๊ด๋ จํ์ฌ impl ์ธ๋ถ ์ ๋ณด๊ฐ ๋์ถ๋๋ ๊ฒ์ ๋ณด๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฅผ ๋ณ๋์ ๋ฌธ์ ๋ก ์ ์ถํ๊ณ ๊ฐ๋ฅํ ์์ ์ฌํญ์ ๋ํ ํ ๋ก ์ ๊ฑฐ๊ธฐ๋ก ์ฎ๊ธธ ์ ์์ต๋๊น?
RFC๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค.
'BLOCK_LABEL: { EXPR }
์ ๋ํ ๊ตฌ๋ฌธ ์คํ์ ๋๋ค.
'BLOCK_LABEL: loop { break { EXPR } }
๋๋ ๊ทธ ๋์ฒด๋ฅผ ์๋ํ๊ณ ์ฝ๋๋ ์ฐ๊ฒฐํ ์ ์๋ ์ฝ๋์ ๋ํ ๊ฒฝ๊ณ ์ ํจ๊ป ์ปดํ์ผ๋ฉ๋๋ค.
#![feature(try_blocks, label_break_value)]
fn main() {
let _: Result<(), ()> = try {
'foo: loop {
break {
Err(())?;
break 'foo;
}
}
};
}
@nikomatsakis @ciphergoth ๋ https://github.com/rust-lang/rust/issues/72483์ผ๋ก ์ ์ถ๋์์ต๋๋ค
๋๋ ๋ ์ด์ ์ด๊ฒ์ ๋ฐ๋ํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๋ ์ด๋ธ์ด ๋ถ์ break์ ์ด๊ธฐ ๊ฐ๋ ์ด ์ค๋๋ ๊ณ ๋ ค ๋์์ด์๋ค๋ฉด ๋ ๊ฐ๋ ฅํ๊ฒ ๋ฐ๋ํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ๊ฐ๋ ์ด ์กด์ฌํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์์์ ๋ธ๋ก์ ๋ํ ์ ์ฉ์ ๊ณ์ ๋ฐ๋ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
(์ด๊ฒ์ break
์ฌ์ฉํ๋ ํ์ฌ ํ์์ ์ ์ฉ๋๋ฉฐ ๋ค๋ฅธ ๊ตฌ๋ฌธ์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.)
@rfcbot ์ ๋ณํฉํ์ง ์์์ผ
@rfcbot์ด ๊ฒํ ํ์ต๋๋ค.
@joshtriplett "์กฐ๊ธฐ ๋ฐํ"์ ์ํํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ๋ฒ์ด async
๋ธ๋ก์์ ๋งค์ฐ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋ค์์ ์์ฑํ๋ ๋์ ๋ค์์ ์๋ฏธํฉ๋๋ค.
async {
// do thing a
if thing_a_failed {
// handle specially (note, _not_ ?)
} else {
// do thing b
if thing_b_failed {
// handle specially (note, _not_ ?)
} else {
// do thing c, etc..
}
}
}
๋ ์ธ์์๋ค:
async {
'block {
// do thing a
if thing_a_failed {
// handle specially (note, _not_ ?)
break 'block;
}
// do thing b
if thing_b_failed {
// handle specially (note, _not_ ?)
break 'block;
}
// do thing c, etc..
}
}
์ด์ ๊น๋ํ๊ฒ ์ ์ฌ ์ด๋ป๊ฒ ํ ์์๋ ์กฐ๊ธฐ ๋ณต๊ท return
ํจ์ /๊ณผ์ ํ์ continue/break
๋ฃจํ์๋ค. ๋ถ๋ช
ํ ์ถ๊ฐ ๋ธ๋ก์ด ํ์ํ์ง ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง( async 'block {
๊ฐ๋ฅ์ฑ?) ์ค์ฒฉ๋ if-s๋ฅผ ํ์คํ ๋ฅ๊ฐํฉ๋๋ค.
๋น๋๊ธฐ ๋ธ๋ก์ด ๋ ์ด๋ธ๋ก ์ง์ ์ฃผ์ ์ฒ๋ฆฌ๋๋๋ก ํ์ฉํ๋ ๊ฒ์ ์ด ๊ธฐ๋ฅ์ ๋ํ ์์ฃผ ์ข์ ํ์ฅ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
@rfcbot fcp ์ทจ์
FCP๋ ์์ํ ์ฐจ๋จ๋์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ์ทจ์ํ๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ง๋ ์ด ๋ฏธ๋๋ฅผ ๊ณ์ ์ถ์งํ ๊ฒ์ธ์ง ๋ ผ์ํด์ผ ํ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๊ฒ์ด ์๋ค๋ฉด ๋น๋๊ธฐ ๋ธ๋ก์ ๊ณ ๋ คํ๋๋ก ์ ๋ฐ์ดํธ๋์ด์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ, ์ด ๊ธฐ๋ฅ์ ๋ํ ์๋ก์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
@nikomatsakis ์ ์์ด ์ทจ์๋์์ต๋๋ค.
๋น๋๊ธฐ ๋ธ๋ก์ด ์๋ ๊ฒฝ์ฐ ์ด ์ ์์ ์๋ฏธ์ ๋ํด ๋ชจํธํจ์ด ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. RFC์ ์ ์๋ ์ฌ์ ํ ์ ์ฉ๋ฉ๋๋ค. ์ฆ,
'BLOCK_LABEL: { EXPR }
๋จ์ํ ๊ตฌ๋ฌธ ์คํ์ ๋๋ค
'BLOCK_LABEL: loop { break { EXPR } }
์์์ ๋ฃจํ์ ๋ฐ์ธ๋ฉ๋๋ ๋ ์ด๋ธ์ด ์ง์ ๋์ง ์์ ์ค๋จ ๋๋ ๊ณ์์ด EXPR ๋ด์์ ๊ธ์ง๋๋ค๋ ์ ์ ์ ์ธํ๊ณ .
break
๋ ์ด๋ธ ๋์ ๋น๋๊ธฐ ๋ธ๋ก์์ (์ด๊ธฐ) return
ํ ์ ์์ผ๋ฏ๋ก ๋น๋๊ธฐ ๋ธ๋ก์ ๋ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
let fut = async {
return 42;
0
};
println!("{}", fut.await); // prints 42
( ๋์ดํฐ )
@WaffleLapkin ์ ๋ ์ฌ์ค ์ต๊ทผ์ ์ ์์ async
_specifically_์ ๋ํ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ๋๋ ์ฒ์์ ์๊ฐํ๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@withoutboats
๋๋ ์ด ์์น์ ๋์ํ๋ฉฐ ์ด ๊ธฐ๋ฅ์ด ๊ทธ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค(ํน์ ํ๊ณ ์ค์ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋์์ผ๋ก ํ๋ ์น์ํ ์ ์ด ํ๋ฆ). ์์ ์ ๊ณต๋ ์์ ์ ๊ฐ์ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ฑฐ๋ ์์ฑํ์ ๋ ์ด๊ฒ์ด ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ์ฌ๋ฌ ๋ฒ ์์ต๋๋ค.
loop
์ ๊ฐ์ ๊ธฐ์กด ์ ์ด ํ๋ฆ ๊ตฌ์กฐ๋ฅผ ๋์ ๋ฌด์กฐ๊ฑดbreak
loop
๊ณผ ํจ๊ป ์ฌ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ค๋๋๊ณ?
,await!
์ฌ์ฉ์ผ๋ก ์ธํด ์ฆ์ ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋คloop
+ ํํbreak
๊ฒ์ ํผ๋์ค๋ฝ๊ณ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์คํ์ผ์ ์ ์ด ํ๋ฆ์ ์ํด ๋ง๋ค์ด์ง ๋๊ตฌ๋ฅผ ๋จ์ฉํ๋๋ก ์๊ตฌํ๋ ๊ฒ๋ณด๋ค ์ค์ ์๋๋ฅผ ์ง์ ํ๊ฒ ํ๋ ๊ฒ์ ์ ํธํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ ๊ฐloop
๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์ฌ์ค๊ณผ ์ ์ฌํ์ง๋ง ๋ค๋ฅธ ์ธ์ด๋while true { ... }
ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋ช ํํ ์๋๋ฅผ ํํํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.์ถ๊ฐ๋ก, ์ด ๊ธฐ๋ฅ์ ์ฐ๋ฆฌ๊ฐ ๋ ์ด๋ธ์ด ๋ถ์ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ๋ ์ด๋ธ์ด ์ง์ ๋ ๊ฒ๋ค์์ ๋ฒ์ด๋๋ ๊ฒ์ ๊ฐ์ํ ๋ Rust๊ฐ ๊ฐ์ง ๊ฒ์ผ๋ก ํญ์
TL;DR: ์ด ๊ธฐ๋ฅ์ ๋ง์ด ์ค์ฒฉ๋
if
๋ฌธ์ ํตํด ๋๋ ๋ฃจํ ์ค๋จ ๊ฐ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์ ๋จ์ฉํจ์ผ๋ก์จ๋ง ๋ฌ๋ฆฌ ์์ฑํ ์ ์๋ ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ง์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ธ๋ก์ด ๋ด๊ฐ ์์ํ๋ ๋๋ก ๋์ํ๋๋ก ํ๋ ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ํ ์์ ์ถ๊ฐ ์ฌํญ์ด๋ฉฐ ํจ์ฌ ๋ ํด์ปค๊ฐ ์๋ ๋ด๊ฐ ์๋ฏธํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค.