[Zig] comptime

[์›๋ณธ ๋งํฌ]

Zig๋Š” comptime ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฝค ๊ฐ•๋ ฅํ•œ ์ปดํŒŒ์ผ ํƒ€์ž„ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์ œ๋„ˆ๋ฆญ์ด๋‚˜ ๋งคํฌ๋กœ์™€ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.




์ œ๋„ˆ๋ฆญ ๊ตฌํ˜„

Zig๋Š” comptime์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ๋„ˆ๋ฆญ ํƒ€์ž… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ด๋Ÿฐ ์‹์ด๋‹ค. ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ comptime๊ณผ ํ•จ๊ป˜ ์ „๋‹ฌ๋ฐ›๊ณ , ๊ทธ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ €๋Ÿฌ๋ฉด ์ปดํŒŒ์ผํƒ€์ž„์— T๊ฐ€ i32๋กœ ์น˜ํ™˜๋˜๊ฒŒ ๋œ๋‹ค.
์ข€ ์›์‹œ์ ์ธ ํŽธ์ด๋‹ค.

๋งŒ์•ฝ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ๋งž์ง€ ์•Š๋Š” ํƒ€์ž…์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด

์น˜ํ™˜๋œ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

์ด๋Ÿฐ๊ฑธ ๋ณด๋ฉด, C++์˜ ์›์‹œ์ ์ธ ํ…œํ”Œ๋ฆฟ๊ณผ ๋™์ž‘๋ฐฉ์‹์ด ๊ฑฐ์˜ ๊ฐ™๋‹ค. ๊ทธ ๋ง์€ ์ œ๋„ˆ๋ฆญ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๊ฐ€ ์ข€๋งŒ ๋ณต์žกํ•ด์ ธ๋„ ์—๋Ÿฌ๊ฐ€ ๊ฑฐ์ง€๊ฐ™์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋ž€ ๋ง์ด๋‹ค. ๋ช…์‹œ์ ์ธ ํƒ€์ž…์— ๋Œ€ํ•œ require ์ง€์ •์ด ์—†๋‹ค. ์™œ์ง€?

๊ทผ๋ฐ ํ•ญ์ƒ ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ์ถ”๋ก ๋„ ์•ˆ๋œ๋‹ค. C++์˜ ์ œ๋„ˆ๋ฆญ์‹œ์Šคํ…œ๋ณด๋‹ค ๋‚˜์„๊ฒŒ ์—†๋‹ค.




์ปดํŒŒ์ผํƒ€์ž„ ๋ณ€์ˆ˜

์œ„์˜ ์ œ๋„ˆ๋ฆญ๊ณผ ๋น„์Šทํ•œ ๋А๋‚Œ์œผ๋กœ, ์ปดํŒŒ์ผํƒ€์ž„ ์ฒ˜๋ฆฌ๊ฐ€ ๋ณด์žฅ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•จ์ˆ˜์— ๋„˜๊ธฐ๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ด๋Ÿฐ ๋А๋‚Œ์ด๋‹ค.

max๋Š” comptime์œผ๋กœ 2๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.
์ด ์ฝ”๋“œ์—์„œ๋Š” 10๊ณผ 20์ด๋ผ๋Š” ์ปดํŒŒ์ผํƒ€์ž„ ์ฒ˜๋ฆฌ๊ฐ€ ๋ณด์žฅ๋œ ๊ฐ’์ด ๋“ค์–ด์™”์œผ๋ฏ€๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด ํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ ์ž์ฒด๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์™„๋ฃŒํ•˜๊ฑฐ๋‚˜, ๊ทธ์— ๊ฐ€๊น๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ์—ฌ๊ธฐ์„œ ์ปดํŒŒ์ผํƒ€์ž„ ๋ณด์žฅ์ด ๋˜์ง€ ์•Š๋Š” ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

์ปดํŒŒ์ผํƒ€์ž„ ๋ณ€์ˆ˜๋กœ ๊ฐ’์„ ๋„˜๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ comptime ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํŒŒ์ผํƒ€์ž„ ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Œ์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๊ทธ๊ฒƒ๋งŒ ์œ ์ง€ํ•œ๋‹ค๋ฉด ์ตœ๋Œ€ํ•œ ์ปดํŒŒ์ผํƒ€์ž„์œผ๋กœ ๋Œ๊ณ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.




์ปดํŒŒ์ผํƒ€์ž„ ํ•จ์ˆ˜ ํ˜ธ์ถœ

comptime์€ ๋ณ€์ˆ˜๋‚˜ ํƒ€์ž…๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ ์•ž์— ๋ถ™์ด๊ณ , ํ•จ์ˆ˜์— ๋„˜๊ธด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ „๋ถ€ comptime์ž„์ด ๋ณด์žฅ๋œ๋‹ค๋ฉด, ์ด ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ž์ฒด๋Š” ์ปดํŒŒ์ผํƒ€์ž„์— ๊ณ„์‚ฐ๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค.

์ด๊ฒƒ๋งŒ์€ ๊ฝค ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. C++์˜ constexpr๋‚˜ Rust์˜ const fn๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€๋Š” ์•Š์ง€๋งŒ.



์ฐธ์กฐ
https://ziglang.org/documentation/0.11.0/#comptime