Rust: RFC 2046์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ, ๋ ˆ์ด๋ธ” ๊ตฌ๋ถ„ ๊ฐ’

์— ๋งŒ๋“  2018๋…„ 02์›” 27์ผ  ยท  135์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/rust

์ด๊ฒƒ์€ RFC 2046(rust-lang/rfcs#2046)์˜ ์ถ”์  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹จ๊ณ„:

ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์งˆ๋ฌธ:

B-RFC-implemented B-unstable C-tracking-issue F-label_break_value T-lang

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@withoutboats

Rust์˜ ์ œ์–ด ํ๋ฆ„ ๋„๊ตฌ ์ƒ์ž์— ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋งค์šฐ ์œ ์—ฐํ•œ ์„ ํƒ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํŠน์ •ํ•˜๊ณ  ์ค‘์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์ธ์ฒด ๊ณตํ•™์ ์ธ ์˜ํ–ฅ์ด ๋†’์€ ์ œ์–ด ํ๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ์›์น™์— ๋™์˜ํ•˜๋ฉฐ ์ด ๊ธฐ๋Šฅ์ด ๊ทธ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(ํŠน์ •ํ•˜๊ณ  ์ค‘์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์นœ์ˆ™ํ•œ ์ œ์–ด ํ๋ฆ„). ์œ„์— ์ œ๊ณต๋œ ์˜ˆ์ œ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๊ฑฐ๋‚˜ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ด๊ฒƒ์ด ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์žˆ์Šต๋‹ˆ๋‹ค. loop ์™€ ๊ฐ™์€ ๊ธฐ์กด ์ œ์–ด ํ๋ฆ„ ๊ตฌ์กฐ๋ฅผ ๋์— ๋ฌด์กฐ๊ฑด break loop ๊ณผ ํ•จ๊ป˜ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค๋„๋˜๊ณ  ? , await! ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์ฆ‰์‹œ ์ ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค

loop + ํ›„ํ–‰ break ๊ฒƒ์€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์˜ ์ œ์–ด ํ๋ฆ„์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ๋ฅผ ๋‚จ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ค์ œ ์˜๋„๋ฅผ ์ง„์ˆ ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ ๊ฐ€ loop ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์–ธ์–ด๋Š” while true { ... } ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋” ๋ช…ํ™•ํ•œ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋” ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ, ์ด ๊ธฐ๋Šฅ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ ˆ์ด๋ธ”์ด ๋ถ™์€ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๊ณผ ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ ๊ฒƒ๋“ค์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ Rust๊ฐ€ ๊ฐ€์งˆ ๊ฒƒ์œผ๋กœ ํ•ญ์ƒ

TL;DR: ์ด ๊ธฐ๋Šฅ์€ ๋งŽ์ด ์ค‘์ฒฉ๋œ if ๋ฌธ์„ ํ†ตํ•ด ๋˜๋Š” ๋ฃจํ”„ ์ค‘๋‹จ ๊ฐ’๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์„ ๋‚จ์šฉํ•จ์œผ๋กœ์จ๋งŒ ๋‹ฌ๋ฆฌ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก์ด ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ๋Œ€๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๋Š” ํ‘œ๋ฉด ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ž‘์€ ์ถ”๊ฐ€ ์‚ฌํ•ญ์ด๋ฉฐ ํ›จ์”ฌ ๋” ํ•ด์ปค๊ฐ€ ์•„๋‹Œ ๋‚ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  135 ๋Œ“๊ธ€

"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๋ฅผ ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด:

  • ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์•ผ์ƒ์—์„œ ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ์„ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ํŒจํ„ด์ด๋‚˜ ๊ฒŒ์œผ๋ฅธ ์Šต๊ด€์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • break/continue ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์€ ๊ด€ํ–‰์œผ๋กœ ๊ฐ„์ฃผ๋  ๋•Œ ์šฐ๋ฆฌ๋Š” ๋…๋‹จ์ ์ธ ์Šคํƒ€์ผ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๊ณ„์ ์œผ๋กœ ๋ฃจํ”„/๋ฐ˜๋ณต์ž ๊ฒฐํ•ฉ์ž๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ํŒจํ„ด์— ๋Œ€ํ•ด ๋ฆฐํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ๋จธ๋ฆฌ๋กœ๋Š” ๊ทธ๋Ÿฐ ํŒจํ„ด์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ฒซ ๋ฒˆ์งธ (ํ‹€๋ฆผ์—†์ด ๋ฐ”์ด์–ด์Šค) ์ƒ˜ํ”Œ๋กœ์„œ, ์‹ค์ œ ์ฝ”๋“œ์— ํ‘œ์‹œ๋œ ํœด์‹๊ณผ ๋งˆ์ง€๋ง‰ (๋จผ์ €) ๋งŒ๋‚จ์€ ๋ณ„์ด ์•„๋‹ˆ์—ˆ๋‹ค : 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 ๋ณ‘ํ•ฉ

๋ณด๊ณ ์„œ

  • ๊ธฐ๋Šฅ ๊ฒŒ์ดํŠธ:

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/feature-gates/feature-gate-label_break_value.rs

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/feature-gates/feature-gate-label_break_value.stderr

  • ์ง„๋‹จ: https://github.com/rust-lang/rust/blob/master/src/librustc_passes/diagnostics.rs#L285
  • ํ…Œ์ŠคํŠธ:

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/label/label_break_value_continue.rs

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/label/label_break_value_unlabeled_break.rs

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/label/label_break_value_illegal_uses.rs

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/lint/unused_labels.rs

    • https://github.com/rust-lang/rust/blob/master/src/test/ui/run-pass/for-loop-while/label_break_value.rs

FCP ์ „์— ํ•  ์ผ

@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 ์ด ์ด๋ฅผ ๋ณ‘ํ•ฉํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋‚˜๋จธ์ง€ ํŒ€์ด ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • [x] @์„ผํŠธ๋ฆด
  • [x] @์•„ํˆฌ๋ก 
  • [x] @cramertj
  • [x] @eddyb
  • [ ] @joshtriplett
  • [x] @nikomatsakis
  • [ ] @nrc
  • [x] @pnkfelix
  • [x] @scottmcm
  • [ ] @๋ณดํŠธ ์—†์ด

์šฐ๋ ค ์‚ฌํ•ญ:

  • ๋น„์šฉ ํŽธ์ต (https://github.com/rust-lang/rust/issues/48594#issuecomment-422235234)
  • FIXME-in-tests (https://github.com/rust-lang/rust/issues/48594#issuecomment-421625182)
  • ์‚ฌ์šฉ ์‚ฌ๋ก€(https://github.com/rust-lang/rust/issues/48594#issuecomment-422281176)

๊ณผ๋ฐ˜์ˆ˜์˜ ๊ฒ€ํ† ์ž๊ฐ€ ์Šน์ธํ•˜๊ณ  ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์˜๊ฒฌ ์ œ์ถœ ๊ธฐ๊ฐ„์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋Š ์‹œ์ ์—์„œ๋„ ์ œ๊ธฐ๋˜์ง€ ์•Š์€ ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํŒ€ ๊ตฌ์„ฑ์›์ด ๋‚˜์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ด ๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@rfcbot์€ ๋น„์šฉ-ํŽธ์ต์— ๋Œ€ํ•ด ์šฐ๋ คํ•ฉ๋‹ˆ๋‹ค.

RFC FCP ์ œ์•ˆ์—์„œ :

๋‹ค๋ฅธ ๊ทธ๋ฃน์€ ์–ธ์–ด์— ๋Œ€ํ•œ ์ด ๊ธฐ๋Šฅ์˜ "๋น„์šฉ ์ด์ "์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค์ง€ ์•Š์•˜๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๊ธฐ๋Šฅ์ด ๊ฐ€์ ธ์˜ฌ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์–ธ์–ด์˜ ์ „์ฒด ํฌ๊ธฐ๋ฅผ ์ฝ์–ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํšจ์šฉ์— ๋น„๋ก€ํ•˜์ง€ ์•Š์•˜๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์šฐ๋ฆฌ๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•œ ์ดํ›„๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ๋‚˜์š”? ์ด๋ฏธ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๋‚˜์˜๋‹ค? ์—ฌ๊ธฐ์— ์ด์ ์ด ์žˆ๋‹ค๋ฉด ์–ธ์–ด๋ฅผ ๋” ํฌ๊ณ  ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋น„์šฉ์„ ๋Šฅ๊ฐ€ํ•ฉ๋‹ˆ๊นŒ?

@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 ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ ๋ถ€์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ฐธ๊ณ : ์ด๊ฒƒ์€ Rocket๊ณผ ์ด ์ฝ”๋“œ ์กฐ๊ฐ์— ํŠน์ •ํ•œ ๋ถˆ๋ณ€์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋‚˜๋Š” ๊ฝค ๊ธฐ๋ปค๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ ์“ฐ๊ณ  ์‹ถ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ด ๊ธฐ๋Šฅ์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ๋‹ค๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@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 ๊ฐ€ ์—ฐ๊ธฐ๋ฅผ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋‚˜๋จธ์ง€ ํŒ€์ด ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • [ ] @์„ผํŠธ๋ฆด
  • [ ] @์•„ํˆฌ๋ก 
  • [ ] @cramertj
  • [ ] @eddyb
  • [x] @joshtriplett
  • [ ] @nikomatsakis
  • [ ] @nrc
  • [ ] @pnkfelix
  • [ ] @scottmcm
  • [x] @withoutboats

ํ˜„์žฌ ๋‚˜์—ด๋œ ์šฐ๋ ค ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ณผ๋ฐ˜์ˆ˜์˜ ๊ฒ€ํ† ์ž๊ฐ€ ์Šน์ธํ•˜๊ณ  ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์˜๊ฒฌ ์ œ์ถœ ๊ธฐ๊ฐ„์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋Š ์‹œ์ ์—์„œ๋„ ์ œ๊ธฐ๋˜์ง€ ์•Š์€ ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํŒ€ ๊ตฌ์„ฑ์›์ด ๋‚˜์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ด ๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@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 ์ด ์ด๋ฅผ ๋ณ‘ํ•ฉํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋‚˜๋จธ์ง€ ํŒ€์›์ด ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • [x] @์„ผํŠธ๋ฆด
  • [x] @์•„ํˆฌ๋ก 
  • [x] @cramertj
  • [x] @eddyb
  • [x] @joshtriplett
  • [ ] @nikomatsakis
  • [ ] @nrc
  • [x] @pnkfelix
  • [ ] @scottmcm
  • [ ] @๋ณดํŠธ ์—†์ด

์šฐ๋ ค ์‚ฌํ•ญ:

๊ณผ๋ฐ˜์ˆ˜ ์ด์ƒ์˜ ๊ฒ€ํ† ์ž๊ฐ€ ์Šน์ธํ•˜๋ฉด(์ตœ๋Œ€ 2๊ฐœ์˜ ์Šน์ธ์ด ๋ฏธ๊ฒฐ ์ƒํƒœ์ž„) ์ตœ์ข… ์˜๊ฒฌ ์ˆ˜๋ ด ๊ธฐ๊ฐ„์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋Š ์‹œ์ ์—์„œ๋„ ์ œ๊ธฐ๋˜์ง€ ์•Š์€ ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํŒ€ ๊ตฌ์„ฑ์›์ด ๋‚˜์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ด ๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@rfcbot ์šฐ๋ ค ์ฐจ๋‹จ

์ €๋Š” ์ด๋ฏธ Rust์— ์ด ๊ธฐ๋Šฅ์ด ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ์ œ ์ž…์žฅ์„ ๋ฐํ˜”์Šต๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ์ด ์ œ์•ˆ์— ๋Œ€ํ•œ ํ•ฉ์˜์— ๋„๋‹ฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์— ์ฐธ์—ฌํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋†’์€์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค.

@rfcbot ํ•ด๊ฒฐ

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๋Š” ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๋ช…๋ นํ˜• ์ œ์–ด ํ๋ฆ„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  1. 'a: for _ in 0..1 { break 'a }
  2. '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_์— ๋Œ€ํ•œ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚˜๋Š” ์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰