[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๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง๋ ์์ง๋ง.