Rust: ๊ธฐ๋ณธ ์ธ์ˆ˜ ๋ฐ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜

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

ํ‚ค์›Œ๋“œ ์ธ์ˆ˜์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์ด์— ๋Œ€ํ•œ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?


์ฐธ๊ณ : ๋ฒ„๊ทธ ์ถ”์ ๊ธฐ๋Š” ์„ค๊ณ„ ํ† ๋ก ์„ ํ•˜๋Š” ๊ณณ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋“  ๋””์ž์ธ ํ† ๋ก ์„ etherpad( https://pad.riseup.net/p/hvbg6dQQnEe7 )๋กœ ๋ณด๋‚ด๊ฑฐ๋‚˜ Wiki์— bikeshedding ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

์ด๋”๋„ท ํŒจ๋“œ:

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

Triage 2013-08-05: ์ง„์ „์ด ์—†์Œ(๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ์Œ), ์—ฌ์ „ํžˆ ๊น”๋”ํ•˜์ง€๋งŒ; ์•„๋งˆ๋„ ์„ ์–ธ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fn foo(bar: int, qux: int = 4, ham: Option<int> = None) { ... }

์—ฌ๊ธฐ์„œ RHS๋Š” ์ƒ์ˆ˜ expr์ž…๋‹ˆ๋‹ค(์ฆ‰, static ์„ ์–ธ์—์„œ ์œ ํšจํ•œ ๊ฒƒ).

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

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

fn foo(bar: int, qux=2: int, ham=0: uint) { ... }

๊ทธ๋Ÿฌ๋ฉด foo(1) , foo(1, 3) , foo(1, ham=4) , foo(6, 7, 8) ๋“ฑ์œผ๋กœ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์•„๋ž˜์—์„œ huonw๊ฐ€ ์ œ์•ˆํ•œ ๊ตฌ๋ฌธ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ํ˜„์žฌ ์„ ์–ธ ๊ตฌ๋ฌธ์—์„œ ํ›จ์”ฌ ๋” ์ข‹๊ณ  ๊ท ์ผํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

Triage 2013-08-05: ์ง„์ „์ด ์—†์Œ(๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ์Œ), ์—ฌ์ „ํžˆ ๊น”๋”ํ•˜์ง€๋งŒ; ์•„๋งˆ๋„ ์„ ์–ธ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fn foo(bar: int, qux: int = 4, ham: Option<int> = None) { ... }

์—ฌ๊ธฐ์„œ RHS๋Š” ์ƒ์ˆ˜ expr์ž…๋‹ˆ๋‹ค(์ฆ‰, static ์„ ์–ธ์—์„œ ์œ ํšจํ•œ ๊ฒƒ).

IMO ์ด๊ฒƒ๋“ค์€ ์ •๋ง ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •๋˜์ง€ ์•Š์€ ํ›„ํ–‰ ์ธ์ˆ˜์— ๋Œ€ํ•ด์„œ๋งŒ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํด๋ฐฑํ•  ์ˆ˜ ์žˆ๋Š” _default arguments_์˜ C++ ์‹œ์Šคํ…œ๋„ ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค... ์˜ค๋ฒ„๋กœ๋”ฉ๋งŒํผ ๋ณต์žกํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋Œ€์ฒด ๋ช…๋ช…๋œ ํ•จ์ˆ˜ ๋ณ€ํ˜•์˜ ์ˆ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด ๋ฐ ์—ด๊ฑฐํ˜• ๋ณ€ํ˜•์—์„œ๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ช…๋ช…๋œ ํ‚ค์›Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•/๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ•ฉ์˜๊ฐ€ ์žˆ๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋™์ž‘์˜ ์ด ๊ฐ„๋‹จํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‚ด๋ถ€๊ฐ€ ์ค€๋น„๋ ๊นŒ์š”?

์ด์ „์— ์ง€์ •๋œ ์ธ์ˆ˜ ๋ฐ ์ผ๋ฐ˜ ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜(์˜ˆ: 0์„ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ::๋˜๋Š” slice(&self, start:uint , end:uint=self.len ()) /* "foobarbaz".slice(6) == "baz" .. ๋˜๋Š” create_window(parent,x,y, width :uint=parent.width ()/4, height:uint= (width_161)/100) /_ ๊ธฐ๋ณธ๊ฐ’์€ ํ™ฉ๊ธˆ ๋น„์œจ ๋ชจ์–‘์˜ ์ฐฝ์ด๋ฉฐ ํฌ๊ธฐ๋ฅผ ์ „ํ˜€ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 1/4 ํ™”๋ฉด ๋„ˆ๋น„์ž…๋‹ˆ๋‹ค.. */ .. .. ์•„๋‹ˆ๋ฉด ์ฝ”๋“œ ๋ถ€ํ’€๋ฆผ์— ๋Œ€ํ•œ ๋ ˆ์‹œํ”ผ์ฒ˜๋Ÿผ ๋“ค๋ฆด๊นŒ์š”?

C++ ์Šคํƒ€์ผ ๊ธฐ๋ณธ๊ฐ’์€ ํ•˜์Šค์ผˆ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฐ์ œํ•˜์ง€๋งŒ ๋“ค์–ด๊ฐˆ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋‹ค๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋ณธ ์ธ์ˆ˜์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ˆ˜๋ฅผ ์™„์ „ํžˆ ์ƒ๋žตํ•˜๋Š” ๋Œ€์‹  ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ์ธ์ˆ˜๋ฅผ _ ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ @huonw ์˜ ๋ฉ‹์ง„ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

fn foo(bar: int, qux: int = 4, ham: Option<int> = None) { ... }

... ์ด๊ฒƒ์„ foo(1, 2, None) , foo(1, _, Some(1)) , foo(1, _, _) ๋“ฑ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ์•„์ด๋””์–ด๋Š” ์—ฌ์ „ํžˆ ์—„๋ฐ€ํ•œ ์œ„์น˜์— ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ์ด์ ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๋ชฉ์„ "๊ธฐ๋ณธ ์ธ์ˆ˜ ๋ฐ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜"๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์ง€๋งŒ ast ๋ฐ ํŒŒ์„œ์— ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/dobkeratops/rust/compare/default_args , ์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ? (์˜ต์…˜ @expr .. expr์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? )
์ด ๊ธฐ๋Šฅ์„ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌผ์— ๋ฐœ๊ฐ€๋ฝ์„ ๋‹ด๊ทธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฒˆ์—ญํ•  ์ˆ˜ ์žˆ๋Š” C++ API์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์—ด๋งํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, C++์—์„œ ํ™•์‹คํžˆ ๊ทธ๋ฆฌ์›Œํ•˜๋Š” ๋ถ€๋ถ„์ด๋ฉฐ ๋ช…๋ช…๋œ ํ‚ค์›Œ๋“œ ๊ธฐ๋Šฅ์€ C++์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ ์ด์ƒ์œผ๋กœ ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ๋กœ ์ œ์•ˆ๋œ ์„ ์–ธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

@dobkeratops ๋Š” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค( type Default = Option<@expr> ๋Š” ์•„๋งˆ๋„ ๋ถˆํ•„์š”ํ•˜์ง€๋งŒ).

์ƒ์˜ ์ œ์•ฝ expr ๊ฐˆ rustc::middle::check_const ; ๊ฐ ์ธ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” check_fn ์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋˜ํ•œ ๊ธฐ๋ณธ args๊ฐ€ ๋์—๋งŒ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋ฉฐ ์œ ํ˜• ๊ฒ€์‚ฌ๊ธฐ rustc::middle::typeck ๋ฐ trans ์—๋„ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. )

Ok ํ•„๋“œ์˜ ์ด๋ฆ„์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ฃผ์„์ด ๋˜๋„๋ก ์ง€์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์–ด๋””๋ฅผ ๋ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” rustc::middle::typeck::.. mod.rs (check_fn something )์—์„œ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋‹น์‹ ์ด ํ™•์‹คํžˆ _๋ฐ˜๋Œ€_ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์˜ ์œ ์ผํ•œ ํŒŒ๊ดด์ ์ž…๋‹ˆ๊นŒ?

๋ˆ„๊ตฐ๊ฐ€๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ฒƒ์ด -Z ์˜ต์…˜(..Session::debug_optsโ€ฆ

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ์—์„œ ์˜ค๋ฅ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

@dobkeratops ์•„์ง ๊ณต์‹ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ PR์ด ๋ฐ›์•„๋“ค์—ฌ์งˆ ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ 1) ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€, 2) ๊ทธ๋ ‡๋‹ค๋ฉด, ๊ตฌ๋ฌธ์€ ์–ด๋– ํ•ด์•ผ ํ•˜๋Š”์ง€, 3) ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ ์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€(๊ธฐ๋ณธ ์ธ์ˆ˜์— ๋Œ€ํ•ด ์„ ํƒํ•œ ์˜๋ฏธ ์ฒด๊ณ„๊ฐ€ ์ด๋ฅผ ๋ฐฐ์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ).

์ข‹์•„, ๋‚˜๋Š” ๊ทธ๋“ค์ด ์•„๋ฌด ๊ฒƒ๋„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋žซ๋™์•ˆ ์•„์ง ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋งค์šฐ ๋‚ฎ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ทธ๊ฒƒ์€ ๋‚ฎ์€ ๋งค๋‹ฌ๋ฆฐ ๊ณผ์ผ, ๊ทธ๋ฆฌ๊ณ  C++ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ์นœ์ˆ™ํ•จ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋งคํฌ๋กœ๊ฐ€ ๋•Œ๋•Œ๋กœ ๋น„์Šทํ•œ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ช…๋œ ์ธ์ˆ˜๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ IMO ์„ ํƒ์  ์ธ์ˆ˜๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๊ณณ์—์„œ๋Š” ์ฃผ์–ด์ง„ arg๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ๋” ์‰ฌ์šด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋น„์Šทํ•œ ์„œ๋ช…๊ณผ ๋น„์Šทํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณธ ๊ฒƒ ๊ฐ™์•„์š”. ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ๊ทธ๋Ÿฐ ๋ ˆ๊ฑฐ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ •๋ง ์งœ์ฆ๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ฏธ๋ฌ˜ํ•œ ๋ถ€๋ถ„์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ์•”์‹œ์  ํ˜•ํƒœ์ด๋ฏ€๋กœ (๋‚ด ์ถ”์ธก์œผ๋กœ๋Š”) ํŠน์„ฑ ๋ถ„์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ/๋˜๋Š” ์œ ํ˜• ์ถ”๋ก ๊ณผ ํ†ตํ•ฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋‹ค์ง€ ์–ด๋ ต์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ„ ์˜ˆ์‚ฐ์ด ์žˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. _์–ธ์–ด_ ๊ธฐ๋Šฅ์œผ๋กœ์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋œ๋‹ค๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค. API ๊ธฐ๋Šฅ์œผ๋กœ API ์„ค๊ณ„์— ์ผ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ BC ์œ„ํ—˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

@Seldaek ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์›ํ•˜๋ฉด stdlib ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์ด๋ฆ„๊ณผ ์„œ๋ช…์„ ๊ฐ€์ง„ ํ•จ์ˆ˜ ์ ‘๊ทผ ๋ฐฉ์‹์— ์ฐฌ์„ฑํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์ฒ ํ•™์ ์œผ๋กœ ๊ฑฐ๋ถ€ํ•˜๋Š” ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์–ธ์–ด(Go)๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Rust์™€ ๋‹ฌ๋ฆฌ Go์—๋Š” ๊ธฐ๋ณธ ์ธ์ˆ˜์˜ ๋ถ€์žฌ๋ฅผ ๋œ ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๊ฐ€๋ณ€ ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.[1] ๋‘˜์งธ, ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ตฌ์„ฑ ๊ตฌ์กฐ์ฒด๋ฅผ ํ•จ์ˆ˜์— ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ƒ๋žต๋œ ํ•„๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์ •(?) ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜).[2]

์ „์ž์˜ ๊ฒฝ์šฐ ๋งคํฌ๋กœ ํ•ด์ปค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋น„๋ก ๊ตฌํ˜„ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€๋งŒ). ์‹ค์ œ๋กœ fmt!() ๋Œ€ํ•œ ํ–ฅํ›„ ๊ต์ฒด๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ifmt!("{foo} {1} {bar} {0}", 0, 1, foo=2, bar=3)

์ด๊ฒƒ์€ ์˜ค๋Š˜๋‚  ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

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

struct Foo { x: int, y: int, z: int }

impl Foo {
    fn default() -> Foo {
        Foo{x: 0, y: 0, z: 0}
    }
}

fn bar(f: Foo) {
    printf!(f);
}

fn main() {
    bar(Foo{y: 5, ..Foo::default()});
}

๋‚˜๋Š” ์ด ๋ฐฉ๋ฒ•์ด ๊ณผ๊ฑฐ์— ๊ธฐ๋ณธ ์ธ์ˆ˜ ๋ถ€์กฑ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌด์‹ฌ์ฝ” ์ œ์•ˆ๋œ ๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ฝค ๋ณด๊ธฐ ํ‰ํ•ฉ๋‹ˆ๋‹ค( bar(Foo{y: 5, ..Foo::default()}) ์™€ bar(y=5) ๋˜๋Š” bar(_, 5, _) ), ๋ฌผ๋ก  ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋Š” _do_ ๊ฒฝ์šฐ์—๋„ ๋ชจ๋“  ํ˜ธ์ถœ์ž๊ฐ€ ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ €๋Š” Python๊ณผ Javascript์—์„œ ์˜จ ์‚ฌ๋žŒ์œผ๋กœ์„œ ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ๋ถ„๋ช…ํžˆ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ API๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” Go์˜ ์ฒ ํ•™์— ์–ด๋Š ์ •๋„ ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค(API ์ž์ฒด์˜ ๊ธฐ๋Šฅ ์ˆ˜๋ฅผ (์ž ์žฌ์ ์œผ๋กœ ํฌ๊ฒŒ) ๋ถ€ํ’€๋ฆฌ๋Š” ๋Œ€๊ฐ€๋กœ).

[1] https://groups.google.com/d/msg/golang-nuts/NWMReL1HueQ/X9mdYduCOB8J

[2] http://stackoverflow.com/questions/2032149/optional-parameters

๋˜ํ•œ ํด๋กœ์ €์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ  ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ผ๊ธ‰ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@bstrie Go ๊ฐœ์š”์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด API๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ๋‚˜์œ ์ƒ๊ฐ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›ํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์ธ์ˆ˜์—์„œ ์ฝœ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” jQuery์˜ "๊ณผ๋ถ€ํ•˜๋œ" ๋ฉ”์„œ๋“œ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์ด์ƒํ•˜๊ณ  ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์ฑ„์šฐ๋Š” ๋ž˜ํผ ํ•จ์ˆ˜๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋Š” ์ผ๋ถ€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ˜๋ฉด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋งŽ์€ ์ƒ์šฉ๊ตฌ๋ฅผ ๋„์ž…ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์˜ˆ๋Š” *::to_str_radix(num, radix) ์ž…๋‹ˆ๋‹ค. ์„ ํƒ์  ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ *::to_str(num, radix = 10) ๋กœ ์ ‘์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ํ•จ์ˆ˜ ๋ณ€ํ˜•์˜ ํญ๋ฐœ๋กœ ์ธํ•ด ์ง๊ด€์ ์ด์ง€ ์•Š๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋‚ด 2 ์„ผํŠธ.

๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์—ฐ๊ธฐํ•˜๊ธฐ์— ์ข‹์€ ํƒ€์ด๋ฐ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ฒ ํ•™์ ์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์„ _์ •๋ง__ ์ƒ๋žตํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ตฌํ˜„ ์‹œ๊ฐ„๊ณผ ์˜ˆ์‚ฐ ์ ˆ์ถฉ์•ˆ์„ ์ •๋‹นํ™”ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ long_function_names_with_lots_of_trailing_qualifiers๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค๋ฉด ๋†€๋ž์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :) ํ•˜์ง€๋งŒ ๊ทธ๋“ค์ด "๊ฐ„๋‹จํ•œ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์ง€๋งŒ ์•„์ง ๊ฐ•๋ ฅํ•œ IDE๋ฅผ ๊ฐœ๋ฐœํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.."๋ผ๊ณ  ๋งํ•˜๋ฉด ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ™•์‹คํžˆ C++์˜ ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๊ธฐ๋ณธ๊ฐ’์„ ๋ชจ๋‘ ๊ทธ๋ฆฌ์›Œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Rusts์˜ ๋‹ค๋ฅธ ํŽธ๋ฆฌํ•จ๊ณผ C++ ๋Œ€์•ˆ์˜ ์•ฝ์†(์˜ค๋žซ๋™์•ˆ 1๊ฐœ์˜ ์ฃผ์š” ์–ธ์–ด์— ๋งค๋‹ฌ๋ฆฐ ํ›„..)

์‹คํ—˜์„ ์œ„ํ•ด 'ํŒŒ์„œ ํ•ดํ‚น'์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค... ๋งคํฌ๋กœ ์ˆ˜์ค€์—์„œ ์ž‘์—…ํ•ฉ๋‹ˆ๊นŒ? ์ธ์ˆ˜๊ฐ€ ๋ˆ„๋ฝ ๋œ ํ˜ธ์ถœ ์‚ฌ์ดํŠธ์—์„œ ๊ธฐ๋ณธ expr์„ ์ธ๋ผ์ธ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธ์ผ ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค - ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋…น์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด _๋ถˆ๊ฐ€๋Šฅ_ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์—ฌ์ „ํžˆ ์ •๋ง๋กœ ์ต์ˆ™ํ•ด์ง€๊ณ  ์žˆ๋Š” ํ•œ ๊ฐ€์ง€๋Š” ๋ฐฉ๋ฒ•์ด ์ด๋ก ์ƒ ๋…น์—์„œ ํ›จ์”ฌ ๋” ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
C++๋กœ ๋Œ์•„๊ฐ€์„œ ๋‚˜๋Š” ํ—ค๋”/์ข…์†์„ฑ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ๋“ค์„ ๋‘๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์—ฌ๊ธฐ ์žˆ๋Š” ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค). ๊ทธ๋ž˜์„œ ์ €๋Š” ์ข…์ข… ๋ณธ๋Šฅ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ์ฐพ์Šต๋‹ˆ๋‹ค.
์•„๋งˆ๋„ Rust๋ฅผ ๋” ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋œ ๊ทธ๋ฆฌ์›Œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋„๋ก: bar(Foo{y: 5, ..Foo::default()}) ์˜ ์ˆ˜๋‹ค์Šค๋Ÿฌ์šด ์ธก๋ฉด์€ ์ œ๊ฐ€ ๋ณด๊ธฐ์— ..Foo::default() ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ์ฒด ์ƒ์„ฑ์—์„œ ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋–จ์–ด๋œจ๋ฆฌ๋ฉด ์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋” ์ž…๋ง›์— ๋งž์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ์ ์ ˆํ•œ ํŠน์„ฑ( Zero ๋˜๋Š” Default )์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋œ ์ƒˆ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Foo{y: 5, *) ์—ฌ๊ธฐ์„œ * ๋Š” ์ด์ „ ..Foo::default() ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜ˆ์ œ๋Š” "๋‹จ์ง€" bar(Foo{y: 5, *}) ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ Foo ๋„ ๊ฑฐ๊ธฐ์— ์—†๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๊ฝค ๊นจ๋—ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

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

@pnkfelix ํ•ด๋‹น ์˜ˆ์ œ์˜ Foo ๊ตฌ์กฐ์ฒด๋Š” ์•„๋งˆ๋„ ํ›จ์”ฌ ๋” ์ž์ฒด ์„ค๋ช…์ ์ธ ์ด๋ฆ„์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋ฉฐ ์ œ์•ˆํ•œ ์„คํƒ•์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์‹ค์ œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

html::start_server(html::ServerOpts{port: 10088, *});

์กฐ๊ธˆ ๋” ๋ฉ‹์ ธ ๋ณด์ž…๋‹ˆ๋‹ค. ์ƒˆ ๊ตฌ๋ฌธ์„ ๋ณด์ฆํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ์ง€ ๋˜๋Š” ๊ธฐ๋ณธ ์ธ์ˆ˜์˜ ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ถฉ์กฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ์ง€ ์—ฌ์ „ํžˆ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ๋‚ด ์ž์‹ ์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด HTML ์„œ๋ฒ„์™€ ๊ฐ™์€ ๋งŽ์€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ๋ฏธ๋ฆฌ server_opts ๊ตฌ์กฐ์ฒด๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ start_server(server_opts) ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒํผ ํ–‰๋ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ..html::ServerOpts::default ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•ด๋„ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์œ ์šฉํ•œ ์œ„์น˜๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฒŒ๋Š” ๋งŽ์€ ์ž ์žฌ์ ์ธ ๋…ผ์Ÿ์ด ์žˆ๋Š” ๊ณณ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋“œ๋ฌผ๊ณ  ๊ตฌ์„ฑ ๊ตฌ์กฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ช‡ ์ค„์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค 1) ์ž‘์—…์ด ์ƒ๋‹นํžˆ ์ผ๋ฐ˜์ ์ด๊ณ  2) ์ž‘์—…์— ๊ฑฐ์˜ ํ•ญ์ƒ ๋ถˆํ•„์š”ํ•˜์ง€๋งŒ ์™„์ „์„ฑ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๊ฐ€ ์ž‘์—…์— ์žˆ์„ ๋•Œ ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ๊ฐ€์žฅ ๊ทธ๋ฆฌ์›Œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

let foo = Some('a');
foo.unwrap();  // same as today
foo.unwrap('z');  // imagine that this replaced unwrap_or_default

int::from_str("4");  // same as today
int::from_str("4", 16);  // imagine that this replaced from_str_radix

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์„ ์ž…๋ ฅํ•˜๊ณ  ๋‚˜๋ฉด ์‹ค์ œ๋กœ๋Š” ๋ณ„๋„์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. :) ์–ด์ฉŒ๋ฉด ๋‚˜๋Š” ๊ฒฐ๊ตญ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€ ์ •๋ง๋กœ ๋ชจ๋ฅผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

@dobkeratops , C++์— ๋Œ€ํ•œ ๊ฒฝํ—˜์—์„œ ๊ธฐ๋ณธ ์ธ์ˆ˜๋กœ ํ™œ์„ฑํ™”๋˜๋Š” ๋ฉ‹์ง„ C++ API์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/mozilla/rust/wiki/Meeting-weekly-2013-08-13์˜ ๋Œ“๊ธ€์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๊ฒƒ์„ ๋จผ ๋ฏธ๋ž˜์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋ณด๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง€๋ช….

OCaml์€ ์˜ค๋ฒ„๋กœ๋”ฉ ์—†์ด ์„ ํƒ์ /๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋Š” T ์œ ํ˜•์˜ ์„ ํƒ์  ์ธ์ˆ˜๋Š” ์•”์‹œ์ ์œผ๋กœ T ์˜ต์…˜์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ ํ•จ์ˆ˜๋Š” ๊ฐ’์ด ์ œ๊ณต๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ธ์ˆ˜๊ฐ€ ์ƒ๋žต๋œ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์„ ํƒ์  ์ธ์ˆ˜์˜ ์„ ์–ธ ๋ฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์„ ํƒ์  ์ธ์ˆ˜์—๋Š” ๋ ˆ์ด๋ธ”์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„ ํƒ ์‚ฌํ•ญ์ด ๋˜๋ ค๋ฉด ํ‚ค์›Œ๋“œ ์ธ์ˆ˜์—ฌ์•ผ ํ•จ). ์ด๊ฒƒ์€ OCaml์˜ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ(๋ ˆ์ด๋ธ”์€ ํ•จ์ˆ˜ ์œ ํ˜•์˜ ์ผ๋ถ€๊ฐ€ ๋จ) ์ด๊ฒƒ์€ Hindley-Milner ์œ ํ˜• ์‹œ์Šคํ…œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ์ƒํ˜ธ ์šด์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฐ๊ณผ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

C++์—์„œ ์˜ค๋ฉด ๊ธฐ๋ณธ ์ธ์ˆ˜ ๊ฐ’์ด ์ •๋ง ๊ทธ๋ฆฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ข…์ข… ๋งŽ์€ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋“œ๋ฌผ๊ฒŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์€ ๊ฑฐ์˜ ํ•ญ์ƒ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ ๋Œ€์‹  ์ˆœ์ „ํžˆ ์กฐํ•ฉ ํ•จ์ˆ˜ ์ด๋ฆ„ ํŒŒ์ƒ๋ฌผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ •๋ง ๊ธด ์ด๋ฆ„์ด ์—‰๋ง์ด ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์ˆ˜ ๋ฐ/๋˜๋Š” ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๊ฐ€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์„ค๋ช…ํ•˜๊ณ  ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ด์•ผ ํ•˜๋Š” 1.0 ์ด์ „ ์ œ์•ˆ์„ ์œ„ํ•ด ์ž‘์—…ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ฐฌ์„ฑํ•˜๋Š” ๋Œ“๊ธ€์„ ๋ณด๋‹ˆ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค :) ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ์›ํ™œํ•˜๊ฒŒ ๋ฒˆ์—ญ๋  ์ˆ˜ ์žˆ๋Š” C++ API์˜ ์–‘์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ C++์— ์ง‘์ฐฉํ•˜๋Š” ํฐ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋น„์šฉ์„ ๋“ค์ด์ง€ ์•Š๊ณ  _๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๋“ค์ด ํ•ด์•ผ ํ•  ํ›จ์”ฌ ๋” ์ค‘์š”ํ•œ ์ผ์ด ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๊ณ  ์—ด๊ฑฐํ˜•์€ C++ ์กฐ๊ฑดํ™”๋œ ๋‘๋‡Œ์— ์ฆ‰์‹œ ๋ช…๋ฐฑํ•˜์ง€ ์•Š์€ ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์†์‹ค๋œ ๋‹คํ˜•์„ฑ์„ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค.

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

C++์—์„œ ๋‚˜๋Š” ์Šค์นผ๋ผ์™€ ํŒŒ์ด์ฌ์ด ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ถ€๋Ÿฌ์›Œํ•˜๋Š” ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค. ๊ทธ ์šฐ์•„ํ•จ์„ ๊ฐ€์ง„ ๋„ค์ดํ‹ฐ๋ธŒ non-GC ์–ธ์–ด๋Š” ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
.. ํ•œ ๊ณณ์—์„œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ, ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋œ ํƒ์ƒ‰ํ•˜๊ณ , ๋” ์ ์€ ์ค‘์ฒฉ ๊นŠ์ด, ์†Œ์Šค ์ฝ”๋“œ์˜ ๋” ์ ์€ ๋…ธ์ด์ฆˆ. ๋‹จ์ˆœํžˆ ํƒ€์ดํ•‘์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
์–ด์ฉŒ๋ฉด ๋” ์ž์ฒด ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์„œ๋ช…์€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์–ด๋ ค์šด ๋ถ€๋ถ„์€ ์œ ํ˜• ๊ฒ€์‚ฌ๊ธฐ์ด๋ฉฐ, ํŒŒ์„œ ํ•ดํ‚น์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒฝ์šฐ ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ๊ณผ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.

fn substr(a:&str, start:int, end:int=a.len())->~str

์˜ค๋ฅ˜ ๊ฒ€์‚ฌ ์—†์ด ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ฒƒ์„ AST์— ํ•ดํ‚นํ•˜๋ฉด ๋งŽ์€ ์ผ์ด ์ž˜๋ชป๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. :)

๊ทธ๋ƒฅ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์žฅ์ ์— ๋Œ€ํ•ด ํ† ๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฐจ๋‹จํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” @tautologico ๊ฐ€ ๊ทธ์˜ ์ฝ”๋ฉ˜ํŠธ์—์„œ ์„ค๋ช…ํ•œ ํ–‰๋™์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

Rust์— ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆ์—ญ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

fn ga(bu: int, zo: Option<int>, meu: Option<int>) {
  let zo = zo.get_or_default(42);
  let meu = meu.get_or_default(99);
  ...
}

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ์œ ํšจํ•œ ํ˜ธ์ถœ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

ga(10, 20, 30); // 20 and 30 are automagically
                // converted to Some(20) and Some(30)
ga(10, 20);         // ga(10, 20, 99) 
ga(10);             // ga(10, 42, 99)
ga(10, None, None); // ga(10, 42, 99)
ga(10, 20, None);   // ga(10, 20, 99)
ga(10, None, 30);   // ga(10, 42, 30)

๊ทœ์น™์€ ํ›„ํ–‰ Option<T> ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Option ์œ ํ˜•์ด ์žฌ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ด๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋” ๊ตฌ์ฒด์ ์ธ OptParam ์œ ํ˜•์ด ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

GUI ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํ•จ์ˆ˜์˜ ์‹ค์ œ ์˜ˆ:

fn showDialog(message: ~str,
              parent: Option<Widget>,
              title: Option<~str>,
              type: Option<DialogType>,
              icon: Option<Icon>) { ... }

// Display an info box in the middle of the screen.
// Set the title to "information", translated in the current locale
// Set the icon to an "info" icon
showDialog(~"hello, world!");

// Display a warning box in the middle of the screen.
// Set the title to "warning", translated in the current locale
// Set the icon to a "warning" icon
showDialog(~"sick, sad world!", None, None, WarningDialog);

// Display a warning box in the middle of the screen.
// Set the title to "warning", translated in the current locale
// Set the icon to a custom icon
showDialog(~"sick, sad world!", None, None, WarningDialog, bugIcon);

์ด ์˜ˆ์—์„œ:

  • parent ์˜ ๊ธฐ๋ณธ๊ฐ’์€ None (์ƒ์œ„ ์—†์Œ).
  • type ์˜ ๊ธฐ๋ณธ๊ฐ’์€ InfoDialog
  • icon ์˜ ๊ธฐ๋ณธ๊ฐ’์€ type ์˜ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • title ์˜ ๊ธฐ๋ณธ๊ฐ’์€ type ์˜ ๊ฐ’๊ณผ ํ˜„์žฌ ๋กœ์ผ€์ผ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ด์ œ Option ๋ฅผ ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ ์œ ํ˜•์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ‰๋ฒ”ํ•œ ์˜ค๋ž˜๋œ enum ์ด๋ฏ€๋กœ ์ง€๊ธˆ์€ ์™„์ „ํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

IMO ๊ธฐ๋ณธ ์ธ์ˆ˜๊ฐ€ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋กœ 10์–ต ๋ฐฐ ๋” ๋‚ซ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ธฐ๋ณธ args๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์ง€๋งŒ ํ‚ค์›Œ๋“œ args๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋””๋”ค๋Œ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ๊ทธ ์ž์ฒด๋กœ ์—ฌ์ „ํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’๋งŒ ์›ํ•˜๋ฉด ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค ์žˆ์œผ๋ฉด ์ž˜ ๊ฒฐํ•ฉ๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)
typechecker/type inferer์— ๋‹ค์‹œ ์žฅ์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜๋Š” ์Šฌ๋กฏ์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•.

์œ„์น˜ ์ธ์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์•”ํ˜ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์™œ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? (์ด๊ฒƒ์ด ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ).

IMO ... "๋‘˜ ์ค‘ ํ•˜๋‚˜"๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๊ตฌ๋ฌธ์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์ด ์ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋””๋”ค๋Œ๋กœ ์‚ผ๊ฑฐ๋‚˜ ๋จผ์ € ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค...

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ๊ฐ’์„ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ณด๋‹ค ๋” ๋น„๋ฐ€์Šค๋Ÿฝ์Šต๋‹ˆ๊นŒ? C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด๋ฏธ thsi์— ๋Œ€ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •๋ ฌ์— ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋์— ์ ์ ˆํ•œ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ์ผ์ข…์˜ ์ œ์–ด ํ”Œ๋ž˜๊ทธ ๋‹จ์–ด.. ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ ๋‚˜์—ดํ•˜์—ฌ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ(..,BLAH_DEFAULT)์„ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  ๊ฐ’์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค. Rust๊ฐ€ ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฏธ C++๋ฅผ ๋‹ค๋ฃจ์—ˆ์œผ๋ฏ€๋กœ ๊ทธ๊ฒƒ์— ์ต์ˆ™ํ•ด์ ธ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ค๋Š˜ ์ผ์ฐ ์œ„์˜ ๋‚ด ์ œ์•ˆ (๊ตฌ์กฐ์ฒด๋ฅผ ์ด๋ฏธ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์ธ์ˆ˜์— ๊ฐ€๊นŒ์šด ๊ฒƒ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด struct-extension ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•จ)์ด ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๊ตฌ๋ฌธ _every_ ์ธ์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ชจ๋‘ ๋‹จ์ผ struct ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด ์˜ฌ๋ ค์ง).

์ด๊ฒƒ์€ ๋ฌผ๋ก  ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํ•„์ˆ˜ ์ธ์ˆ˜์™€ ์„ ํƒ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์„ ์–ธ ๊ตฌ๋ฌธ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ํ•จ์ˆ˜/ํด๋กœ์ €/๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• ๋•๋ถ„์— ํ•จ์ˆ˜ ์„ ์–ธ์ด _์ด๋ฏธ ํ„ธ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


ํ˜„์žฌ ๋ธŒ๋ ˆ์ธ ์Šคํ† ๋ฐ์€ ๊ตฌ์กฐ์ฒด ํ•ญ๋ชฉ ์ •์˜์—์„œ ํ•„๋“œ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํ‘œํ˜„์‹์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ์กด ๊ตฌ์กฐ์ฒด ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ํ•„๋“œ์™€ ํ•„์ˆ˜ ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

struct Foo { x: int = 0, y:int = 0, z:int = 0 }

fn bar(f: Foo) {
    printf!(f);
}

struct Baz { x: int, y: int, z:int = 0 }

fn quux(g: Baz} {
    printf!(g);
}

fn main() {
    bar(Foo{y: 5});
    quux(Baz{y: 5}); // ~ERROR: required field, `x`
}

@pnkfelix ๋‚˜๋Š” ๊ทธ ์ œ์•ˆ์ด ๋งˆ์Œ์—

fn bar({ x: int = 0, y:int = 0, z:int = 0 }) {
    printf!(f);
}

fn quux({ x: int, y: int, z:int = 0 }) {
    printf!(g);
}

fn main() {
    bar({ y: 5 });
    quux({ y: 5 }); // ~ERROR: required field, `x`
}

@visionmedia @bstrie ๊ตฌ์กฐ์ฒด ์ด๋ฆ„์„ ์—†์• ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ง๋กœ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฆฌ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ์„ ์–ธ ์€ ํ˜ธ์ถœ ์‚ฌ์ดํŠธ์—์„œ ์ถ”๊ฐ€ ๋ฌธ์ž์˜ ์ตœ์†Œ ์ˆ˜๋ฅผ 3(์ด๋ฆ„ + ์™ผ์ชฝ ๋ฐ ์˜ค๋ฅธ์ชฝ ๋Œ€๊ด„ํ˜ธ์˜ ๊ฒฝ์šฐ)์œผ๋กœ ์ค„์—ฌ ๊ธด ์ด๋ฆ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ฆ‰, bstrie๊ฐ€ ๋‚˜์—๊ฒŒ ์ œ์‹œํ•œ ServerOpts ์˜ˆ:

fn main() {
  use O = html::StartServerOptions;
  ...
  html::start_server(O{port: 10088});
}

@pnkfelix ์ข‹์•„์š”

struct Foo {
   x: int = 10,
   y: float = 1.0
}

๊ตฌ๋ฌธ์ด์ง€๋งŒ ํ•ฉ๋ฆฌ์ ์ธ ํ•„์ˆ˜ ์ธ์ˆ˜(๋ถˆํ–‰ํžˆ๋„ ์ด๋ฆ„์ด ์ง€์ •๋˜์ง€ ์•Š์Œ)๋ฅผ ์–ป๋Š” ๋ฐ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์ธ์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

struct FooOptions { ... }
static default: FooOptions = FooOptions { ... };
fn foo(compulsory: int, required: uint, necessary: float, optionals: FooOptions) { ... }

FWIW, ๋‚˜๋Š” ๋˜ํ•œ ๊ธฐ๋ณธ ๊ฐ’ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐ€๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

struct Test {
    m: int,
    y: int
}

static DEFAULT: Test = Test{m: 10, y: 15};

Test{y: 5, ..DEFAULT}

๋‚˜๋Š” ์ •์˜ ๋‚ด๋ถ€์˜ ๊ตฌ์กฐ์ฒด ๊ธฐ๋ณธ๊ฐ’๋„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ตฌ๋ฌธ์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ typechecker ์†Œ์Šค ๋“ฑ์„ ๋‘˜๋Ÿฌ๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค...

์•„๋งˆ๋„ ์ด๋ฏธ ๊ธฐ๋ณธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์ข€ ๋” ์‰ฌ์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ต์žฅ. ์ต๋ช… ๊ตฌ์กฐ์ฒด๋Š” ์›๋ž˜ ๊ทธ๊ฒƒ๋“ค์ด ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ '์ด์ƒํ•œ ์ƒํ˜ธ ์ž‘์šฉ ๋•Œ๋ฌธ์—'์ œ๊ฑฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๊นŒ?
๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ตฌ์กฐ์ฒด๋Š” _keyword_ ์ธ์ˆ˜์˜ ํ•„์š”์„ฑ์„ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ C++์—์„œ์™€ ๊ฐ™์€ ํ›„ํ–‰ ๊ธฐ๋ณธ๊ฐ’์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํŽธ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ -
http://www.parashift.com/c++-faq-lite/named-parameter-idiom.html
lol - ํฅ๋ฏธ๋กญ์ง€ ๋งŒ ์ง„์ •ํ•œ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋Š” ์ด์™€ ๊ฐ™์€ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ๋ฌด๊ฑฐ์šด ํ•ดํ‚น์˜ ํ•„์š”์„ฑ์„ ํ”ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ต์žฅ. ์ต๋ช… ๊ตฌ์กฐ์ฒด๋Š” ์›๋ž˜ ๊ทธ๊ฒƒ๋“ค์ด ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ '์ด์ƒํ•œ ์ƒํ˜ธ ์ž‘์šฉ ๋•Œ๋ฌธ์—'์ œ๊ฑฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๊นŒ?

์›๋ž˜ ๋ชจ๋“  ๊ตฌ์กฐ์ฒด ์œ ํ˜•์€ ๊ตฌ์กฐ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํŠน์„ฑ๊ณผ์˜ ์–ด์ƒ‰ํ•œ ์ƒํ˜ธ ์ž‘์šฉ์œผ๋กœ ์ธํ•ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋ช…๋ชฉ ๊ตฌ์กฐ์ฒด ์œ ํ˜•์œผ๋กœ ๋Œ€์ฒด๋จ).

๋‚˜๋Š” ๊ตฌ์กฐ์ฒด ์ •์˜ ์•„์ด๋””์–ด์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ ์–ด๋„ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์—ด๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "์˜ต์…˜" ์œ ํ˜• ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด "์„ ํƒ์ " ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ๋ชจ๋“  ํ˜ธ์ถœ ์‚ฌ์ดํŠธ๊ฐ€ ๋‹ค์Œ์œผ๋กœ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 0/None/etc๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

Perl(๊ธฐ๋ณธ๊ฐ’์€ ์ž„์‹œ ํŒจํ„ด์ž„), Python 2( foo() takes at least 2 arguments (2 given) ์–ป์„ ์ˆ˜ ์žˆ์Œ), Python 3(๊ธฐ๋ณธ๊ฐ’ ์—†์ด ๋ช…๋ช…๋œ ์ „์šฉ ์ธ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ)์—์„œ ๋‚˜์˜จ ์ €๋Š” ๊ฒธ์†ํ•˜๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด๋ฅผ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ตœ์ข… ์ธ์ˆ˜๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ํ˜ธ์ถœ์ž๊ฐ€ ๊ตฌ์กฐ์ฒด ํ•„๋“œ๋ฅผ _inline_ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ _์‹ญ๋Œ€_ ๋น„ํŠธ์˜ ์„คํƒ•.

์˜ˆ

impl int {
    struct FromStrOptions {
        radix: uint = 10
    }
    fn from_str(s: str, opts: FromStrOptions) -> int {
        // ...
    }
}

int::from_str("4", radix: 10);

์žฅ์ :

  • ํ•จ์ˆ˜ ์ •์˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์€ ์—†์œผ๋ฉฐ ์‹ค์ œ๋กœ ํ˜ธ์ถœ์ž๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ „ํ˜€ ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ do ํ•˜์—ฌ ๋ธ”๋ก์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆœ์ „ํžˆ ํ˜ธ์ถœ์ž์˜ ๊ด€์‹ฌ์‚ฌ์ž…๋‹ˆ๋‹ค. (๋งˆ์ง€๋ง‰ ์ธ์ˆ˜๊ฐ€ ๊ตฌ์กฐ์ฒด์ด์ง€๋งŒ kwargs์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ ์˜ตํŠธ์ธ/์•„์›ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์•„๋ฌด๋„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„๊นŒ์š”? ์•„๋ฌด๋„ do ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ ˆ์ด์•„์›ƒ๊ณผ C ํ˜ธ์ถœ ์˜๋ฏธ ๋“ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฝค ์ž˜ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ํ˜• ๋˜๋Š” arity์— ์˜ํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์–ธ์  ๊ฐ€๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋” ์ด์ƒ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ตœ์ข… ์ธ์ˆ˜์˜ ์œ ํ˜•์ด ์œ ํ˜• ์˜ค๋ฒ„๋กœ๋”ฉ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ๋ง์ž…๋‹ˆ๋‹ค. ๊ฐ€๋ณ€ ์ธ์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ด๋ฅผ ๋ฐฉํ•ดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ๊ธฐ๋ณธ๊ฐ’ ์„ธํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • **kwargs ์™€ ๊ฐ™์€ ๋ฌด๋ฃŒ: ๊ทธ๋ƒฅ ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์œ„์น˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ํ•„์ˆ˜ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋ฆ„์œผ๋กœ _something_์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฆ„์œผ๋กœ ์œ„์น˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์ด์ƒํ•œ ํ˜ผ๋ž€์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • ์•ฝ๊ฐ„ ๋งˆ๋ฒ•. ๊ทธ๋Ÿฌ๋‚˜ 5 ์ „๋‹ฌํ•˜๊ณ  ํ•จ์ˆ˜์˜ argspec์—์„œ ์œ ํ˜•์„ ์œ ์ถ”ํ•˜๋Š” ๊ฒƒ ์ด์ƒ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด do ๊ด€์šฉ๊ตฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ธ์ˆ˜ _write_ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์ถฉ๋ถ„ํžˆ ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, do ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ๋งŒ ๋งˆ์ง€๋ง‰ ์ธ์ˆ˜๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

FWIW int::from_str("4", radix: 10) ๋Š” ์ด์ „์— ์ œ์•ˆ๋œ : ๋ฅผ ์œ ํ˜• ์ง€์ • ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

์ €์ฃผ, ASCII์— ์˜ํ•ด ์ €์ง€๋จ.

int::from_str("4", radixโ˜ƒ 10)

๋‚˜๋Š” ํ‚ค์›Œ๋“œ args์— ๋Œ€ํ•ด = ์‚ฌ์šฉ์— ํˆฌํ‘œํ•˜๊ณ , ํ•˜์œ„ ํ‘œํ˜„์‹ ๋‚ด ํ• ๋‹น์— ๋Œ€ํ•œ C์˜ ์•„์ด๋””์–ด๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์–ด์จŒ๋“  ๋Œ€๋ถ€๋ถ„์˜ ๋ถˆ๋ณ€์˜ ์•„์ด๋””์–ด์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ) .. ์Šค์นผ๋ผ๊ฐ€ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. C์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์— ๋งž๋Š” ๊ฐ€๋Šฅํ•œ ์˜ˆ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ธ์ˆ˜ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ์ฒ˜๋Ÿผ ๋ณ€์ˆ˜ argumentmnt ์Šคํƒ€์ผ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค(๊ฑฐ์˜ args ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์ด๋ฆ„์— ์ ‘๋ฏธ์‚ฌ๋กœ ๋ถ™์€ ๊ฒƒ์ฒ˜๋Ÿผ .. )

์šฐ๋ฆฌ ๋Š” ์–ด์ ฏ๋ฐค ์ฃผ๊ฐ„

ํ•จ์ˆ˜ ์„ ์–ธ/ํ˜ธ์ถœ ํ˜•์‹์„ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์œผ๋ฉฐ ์ด์ „ ์˜๊ฒฌ ์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ ๊ตฌ์กฐ์ฒด ์„ ์–ธ์„ ํ™•์žฅํ•˜์—ฌ ํ•„๋“œ ๊ธฐ๋ณธ๊ฐ’(const ํ‘œํ˜„์‹๊ณผ ์—ฐ๊ฒฐ๋จ)์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ฐ ๋ชจ๋‘๊ฐ€ ๋™์˜ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์›ํ•˜๋Š” ๊ฒƒ์˜ ๋Œ€๋ถ€๋ถ„.

ํŒ€์€ ๋˜ํ•œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด 1.0 ๋ฆด๋ฆฌ์Šค์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฆฌ๋” @brson ์€ 1.0 ์ดํ›„(์˜ˆ: 1.1 ๋ฆด๋ฆฌ์Šค์˜ ๊ฒฝ์šฐ)๋ฅผ ์œ„ํ•ด ์ด ์ž‘์—…์— ๋Œ€ํ•œ ํ”„๋กœํ† ํƒ€์ดํ•‘์„ ๋‚จ๊ฒจ๋‘˜ ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“  ๊ธฐ์—ฌ์ž์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ํžŒํŠธ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•ดํ‚นํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ 1.0 ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ pull ์š”์ฒญ์ด๋‚˜ r+๋ฅผ ์ œ์ถœํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์†์„ ๋“ค์–ด, Rust๋Š” ๋†€๋ผ์šด ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ์ œ๋Œ€๋กœ ํ•ด์„œ ์›ƒ๊ธฐ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์„ 1.0 ์ดํ›„๋กœ ์—ฐ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ•จ์ˆ˜ ์ธ์ˆ˜๋Š” ์ข‹์€ API ๋””์ž์ธ์„ ์œ„ํ•ด _critical_์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์ด ์—†์œผ๋ฉด ๋” ๊ฐ„๋‹จํ•œ API๊ฐ€ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. std ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ˆ:

  • ์„ ํƒ์ ์œผ๋กœ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” concat ๋Œ€์‹  concat ๋ฐ connect .
  • split_iter ๋ฐ splitn_iter ์ด์ƒ ๋‹จ์ง€ split_iter ์˜ต์…˜์œผ๋กœ count . rsplit_iter ๋ฐ rsplitn_iter ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ.

๊ธฐ๋ณธ ์ธ์ˆ˜๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด์ œ ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ๋‘ ๊ฐœ(๋˜๋Š” ๊ทธ ์ด์ƒ)์˜ ์ด๋ฆ„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์ˆ˜๊ฐ€ 1.0 ์ดํ›„๋กœ ์—ฐ๊ธฐ๋˜๋ฉด ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์— std ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ์ธ์ˆ˜๊ฐ€ ๋ฏธ๋ž˜์— ์ถ”๊ฐ€๋˜๊ณ  ํ•จ์ˆ˜์˜ "๋ฐ”๋‹๋ผ" ๋ฒ„์ „์ด ์ด์ œ ๋‹ค๋ฅธ ๋ณ€ํ˜•์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„ ์ด์ „ ๋ณ€ํ˜•์ด ๊ณ„์† ์œ ์ง€๋˜๊ณ  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ™•์‹คํžˆ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์ด์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ๋ผ๋„.

๋”ฐ๋ผ์„œ ์ถ”๊ฐ€์ ์ธ ์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ โ€‹โ€‹_์˜์›ํžˆ_ ๋‚จ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

[NB ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํ˜• ๊ธฐ๋ฐ˜ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ฃผ์žฅ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(ํ˜„์žฌ ํŠน์„ฑ ๊ธฐ๋ฐ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กญ๊ณ  std ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค), ์ด ๋ฌธ์ œ๋Š” ๊ทธ ๋…ผ์˜๋ฅผ ์œ„ํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.]

Rust ๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„, Rust๋ฅผ ์ž‘์—…ํ•˜๊ณ  ๋ฉ‹์ง€๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ €๋Š” ํ•ต์‹ฌ ํŒ€์—์„œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž ์‹œ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ์†Œํ†ตํ•˜๊ณ ์ž ํ•˜๋Š” ๊ทน๋„์˜ ๋‚™๋‹ด์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด "๋จผ ๋ฏธ๋ž˜" ์ด์ •ํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ Rust์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋งˆ์ผ์Šคํ†ค 1(์ž˜ ์ •์˜๋จ)์— ์žˆ๋Š” 41๊ฐœ์˜ ๊ณต๊ฐœ ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ•ด๊ฒฐํ•˜์„ธ์š”.

https://github.com/mozilla/rust/issues?milestone=12&state=open

๋˜๋Š” ๋งˆ์ผ์Šคํ†ค 2(์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ)์— ์žˆ๋Š” 104๊ฐœ์˜ ์—ด๋ฆฐ ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜:

https://github.com/mozilla/rust/issues?milestone=13&state=open

๋˜๋Š” ๋งˆ์ผ์Šคํ†ค 3์— ์žˆ๋Š” 68๊ฐœ์˜ ์—ด๋ฆฐ ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜(์šฐ๋ฆฌ๊ฐ€ ํ•œ ์‹œ์ ์—์„œ ๋™์˜ํ•œ ๊ธฐ๋Šฅ์€ Rust 1.0์„ ๋ฆด๋ฆฌ์Šคํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค):

https://github.com/mozilla/rust/issues?milestone=14&state=open

๋˜๋Š” ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•ด ์„ค๋ช…์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ์ง„ํ–‰ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•˜๊ธฐ ์œ„ํ•ด ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„๊ทธ๋Š” 213๊ฐœ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ด ๋ฌธ์ œ๋ณด๋‹ค Rust์—๊ฒŒ ํ›จ์”ฌ ๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์ตœ๊ณ ์˜ ๊ฐ์‚ฌ๋ฅผ ํ‘œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŒ€์ด ํ•ด์•ผ ํ•  ์ผ์ด ํ›จ์”ฌ ๋” ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ '๊ทน๋„์˜ ๋‚™๋‹ด์„ ์ „๋‹ฌ'ํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Vallorics ์˜๊ฒฌ์— +1. ์ด๋ฆ„์„ ์ง“๋Š” ๊ฒƒ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ํŒŒํ—ค์น˜๊ณ  ๋” ๋งŽ์€ ์ด๋ฆ„์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€ ์ง€๊ฒน์Šต๋‹ˆ๋‹ค..; ๊ธฐ๋ณธ args/overloading์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค์›Œ๋“œ args๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด์— ๋Œ€ํ•ด C++๋ฅผ ๋›ฐ์–ด๋„˜๋Š” ๊ธฐํšŒ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” github์ด ํˆฌํ‘œ๋ฅผ ํ–ˆ์œผ๋ฉด ์ข‹์•˜์„ ํ…๋ฐ, ์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ๋” ์š•์„ ํ•˜๋Š” ๋Œ€์‹  +1์„ ๋ˆŒ๋ €์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

@Valloric ๋‚˜๋Š” ์ „์ ์œผ๋กœ ๋™์˜ํ•˜๋ฉฐ(์ด์ „์— ๋งํ–ˆ๋“ฏ์ด)

์ด๊ฒƒ์ด ์ข‹์€ ์–ธ์–ด ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ํ•ฉ์˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ/๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ๋„ ์—†์Šต๋‹ˆ๋‹ค. 1.0์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋งค์šฐ ๋ถˆํ•„์š”ํ•œ ๊ตฌ๋ฌธ ์„คํƒ•์„ ๊ฟˆ๊พธ๊ธฐ ์ „์— ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๊ธฐ์กด์˜ ํ•ต์‹ฌ ์–ธ์–ด ๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

'dreaming up'์€ ๋ญ”๊ฐ€ ๊ธฐ๋ฐœํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๊ตฌ๋ฌธ ์„คํƒ•์ด ์•„๋‹ˆ๋ผ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๊ณ  ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ๊ธฐํ˜ธ์˜ ์ˆ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

1.0์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋งค์šฐ ๋ถˆํ•„์š”ํ•œ ๊ตฌ๋ฌธ ์„คํƒ•์„ ๊ฟˆ๊พธ๊ธฐ ์ „์— ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๊ธฐ์กด์˜ ํ•ต์‹ฌ ์–ธ์–ด ๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ˆ˜์ •/๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด ๊ธฐ๋Šฅ์ด ๋” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ง์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์•„๋งˆ ๊ทธ๋Ÿด ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋Š ์ชฝ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ด ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด std ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ _forever_์˜ API ํ’ˆ์งˆ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— 1.0์—์„œ (๋‹ค๋ฅธ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜) ์ด ๊ธฐ๋Šฅ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ์˜๊ฒฌ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ IMO ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋ณด๋‹ค ์ œ๊ณตํ•˜๋Š” API์— ์˜ํ•ด ๋” ๋งŽ์ด ์‚ด๊ณ  ์ฃฝ์Šต๋‹ˆ๋‹ค. Python์˜ "๋ฐฐํ„ฐ๋ฆฌ ํฌํ•จ" ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ „์ฒด ์–ธ์–ด๋ฅผ ํŒ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. CPAN์€ Perl์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. .Net์€ C# ์ฝ”๋“œ ์ž‘์„ฑ์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  LINQ๋Š” ์–‡๊ฒŒ ์ฌ ๋นต ์ดํ›„๋กœ ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค. C++์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ์šฐ์ˆ˜ํ•˜๊ณ  ํ‘œ์ค€ํ™”๋œ API๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋“ฑ.

API๋Š” ์–ธ์–ด์˜ ์„ฑ๊ณต์— ๋งค์šฐ ์ค‘์š”ํ•˜๋ฏ€๋กœ _good_ API ์ƒ์„ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด "๋น„ํ•„์ˆ˜์ ์ธ ๊ตฌ๋ฌธ ์„คํƒ•"์œผ๋กœ ํ๊ธฐ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

@dobkeratops : _dreaming up_ ์ด๋ผ๋Š” ๋ง์„ ํ•ด์„œ ์•„์ง ์™„์ „ํ•œ ์ œ์•ˆ์ด ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ์˜์‚ฌ๊ฒฐ์ • ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์€ ๋น„์ƒ์‚ฐ์ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์‹œ๊ฐ„์„ ๋” ์ด์ƒ ์†Œ๋ชจํ•˜์ง€ ์•Š๋„๋ก ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ง€๊ธˆ๋ถ€ํ„ฐ 1๋…„ ํ›„ ๋˜๋Š” ๊ทธ ์ดํ›„์— ์ด ์ฑ…์„ ๋‹ค์‹œ ์—ด๊ฑฐ๋‚˜(๋˜๋Š” ์ƒˆ ๋ฌธ์ œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉด) ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฑฐ์˜ ๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ(๋ฌธ๋ฒ•, ์˜๋ฏธ๋ก )์ด ํฌํ•จ๋œ ์ œ์•ˆ์„ ์ œ์•ˆํ•˜๋ฉด ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํŠน์ • ๋ฐฉ๋ฒ•์ด _์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•_์ด๋ผ๋Š” ํ•ฉ์˜์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  once ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ ๋’ค์— ์‹คํ—˜์  ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‘ ๋ฒˆ์งธ @thestinger -- ๋ˆ„๊ตฐ๊ฐ€(๋˜๋Š” ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค)๊ฐ€ ์™„์ „ํ•œ ์ œ์•ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฑฐ๋‚˜ ํ† ๋ก ์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ฒ ์ž๊ฐ€ ์žˆ๋Š” ๊ณต๋ฐฑ์ด ์žˆ๋Š” ์ œ์•ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋กœ. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ์ œ์•ˆ์„ ๊ตฌํ˜„ํ•œ๋‹ค๋Š” ์•ฝ์†์€ ์•„๋‹ˆ์ง€๋งŒ ์•„์ด๋””์–ด๋ฅผ ๊ณต์‹ํ™”ํ•˜๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด ๊ธฐ๋Šฅ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ œ์•ˆ์˜ ๊ฐ€์น˜๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@stinger @catamorphism ์—ด๋ฆฐ ๋งˆ์Œ์„ ์œ ์ง€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์‹œ๊ฐ„์ด ๋‚˜๋ฉด ์ œ์•ˆ์„œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ rust-dev์— ๋ณด๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ํ† ๋ก ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์‚ฌ์–‘์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํŒจ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://pad.riseup.net/p/hvbg6dQQnEe7

๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฏธ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ ์™„์ „ํžˆ ๋ฐฐ์ œ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์ฃผ์ œ์— ๊ด€ํ•œ ์–ด๋–ค ๋Œ€ํ™”๋„ ๋Š๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@brson ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” etherpad์— ๋Œ€ํ•œ ๋งํฌ์™€ ํ•จ๊ป˜ ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ํŽธ์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•.
ํŒจ๋“œ ์ƒ์„ฑ ์ดํ›„๋กœ ๋งŽ์€ ๋””์ž์ธ ์ œ์•ˆ, ์งˆ๋ฌธ, ๋ฌธ์ œ ๋“ฑ์œผ๋กœ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค...
๊ทธ๋ž˜์„œ ํ† ๋ก  ํŒจ๋“œ๋ฅผ "์š”์•ฝ"ํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๋ฒˆ์งธ ํŒจ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒจ๋“œ๋Š” ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
ํŒจ๋“œ URL: https://pad.riseup.net/p/Ca5PBeDjUGxW

@KokaKiwi ์ด์ œ ํŒจ๋“œ๊ฐ€ ๋‹ค ๋น„์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์šฉ์€ ์–ด๋””๋กœ ๊ฐ”๋‚˜์š”?

@cmr , ๋‚˜๋Š” ์ถ”์ธกํ•œ๋‹ค:

๊ฒฝ๊ณ : ์ด ํŒจ๋“œ๋Š” ํŽธ์ง‘ ์—†์ด 30์ผ์ด ์ง€๋‚˜๋ฉด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ผ์ด ๋ฐœ์ƒํ•œ ํ›„์—๋Š” ํŒจ๋“œ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค!

:์ฐก๊ธ‹:

์‹ค์ œ๋กœ Mozilla Etherpad ์ธ์Šคํ„ด์Šค์—์„œ ๋งŒ๋“  ํŒจ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ(์ด ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด) ๋‚ด ๊ธฐ๋ก์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๊ณ  ์—ฌ๊ธฐ์— ๋งํฌ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.(

@cmr @huonw @KokaKiwi , ์—ฌ๊ธฐ ๋‚ด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://etherpad.mozilla.org/CQEDa85jLX
https://etherpad.mozilla.org/78FA1bozLd

@dram ๋‚ด๊ฐ€
์ƒˆ๋กœ์šด ๋งํฌ๋กœ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

(์ˆ˜์ •๋จ.)

์–ธ์–ด์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ธฐ ์ „์— ์ฃผ์˜ ๊นŠ๊ฒŒ ๊ด€์ฐฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋ผ๋Š” ๊ฒƒ ์™ธ์—๋Š” ์ถ”๊ฐ€ํ•  ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์–ธ์–ด(Objective-C ๋ฐ Python)์—์„œ ๋‚˜์˜จ ๋ช…๋ช…๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์— ์ƒ์‚ฐ์„ฑ์„ ๊ฐ„์ ‘์ ์œผ๋กœ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ์€ ์ƒˆ๋กœ์šด RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค: https://github.com/rust-lang/rfcs

์œ ์šฉํ•œ ํ† ๋ก  ์˜์—ญ์ด ๋˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์ƒ์ถฉ๋˜๋Š” ์•„์ด๋””์–ด์™€ ๋‹ค์–‘ํ•œ ๋Œ€ํ™” ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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