Ninja: ํƒ€์ž„์Šคํƒฌํ”„ ๋Œ€์‹  ํŒŒ์ผ ํŠน์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜

์— ๋งŒ๋“  2018๋…„ 08์›” 14์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ninja-build/ninja

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

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

ํŒŒ์ผ ํ•ด์‹œ ๋˜๋Š” ๊ธฐํƒ€ ๊ณ ์œ ํ•œ ํŒŒ์ผ ํŠน์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด Ninja๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ต์…˜์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

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

๋˜ํ•œ ์ง์žฅ์—์„œ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฐ ์„ฑ๊ณต์„ ๊ฑฐ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. #929๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ https://github.com/moroten/ninja/commits/hashed์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋งŽ์€ ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๊ทœ์น™์˜ hash_input = 1 ๋Š” ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ง€์ ์—๋Š” ์—ฌ์ „ํžˆ O(n) O(n^2) stat ์ด ๋„ˆ๋ฌด ์ž์ฃผ ์žˆ๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ๊ฐ€์งœ ๊ฐ€์žฅ์ž๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ ํ•ด์‹ฑ์„ ๋‹Œ์ž์˜ ์ผ๊ธ‰ ๋ฉค๋ฒ„๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด์‹œ๋ฅผ ๋นŒ๋“œ ๋กœ๊ทธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. SHA256์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ Bazel์˜ ์›๊ฒฉ ์‹คํ–‰ API์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. C++ ๊ตฌํ˜„์€ https://gitlab.com/bloomberg/recc/์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฝค ์ข‹์ง€ ์•Š์„๊นŒ์š”?

๋ถˆํ–‰ํžˆ๋„ ๊ฐ€์งœ ๊ฐ€์žฅ์ž๋ฆฌ์— ๋Œ€ํ•œ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋ฉด ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

929 ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์ผ ์ˆ˜์ฒœ ๊ฐœ์˜ ๋นŒ๋“œ์— ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ(ํฌํฌ์—์„œ) ๋ณ‘ํ•ฉ ๋Œ€์ƒ์œผ๋กœ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

929๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด๋ฏ€๋กœ ccache ๋˜๋Š” ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋นŒ๋“œ ์ •์˜๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์ด๊ฒƒ์ด ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ธ์ˆ˜์— ์‘๋‹ต: ์˜ˆ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฃจํ”„์— ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ทœ์น™์ด ์™„๋ฃŒ๋จ(depslog+hashlog+...)). ๊ทธ๋ž˜์•ผ๋งŒ ํ•ด์‹ฑ์ด ์•„ํ”„๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฃจํ”„๊ฐ€ ์–ด์จŒ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. -j1000 ์‹คํ—˜์„ ํ•ด๋„ ํ•ด์‹ฑ์œผ๋กœ ๋ฐ”์œ ๋‹Œ์ž๋ฅผ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๋น ๋ฅธ ๋งˆ๋ฌด๋ฆฌ ๊ทœ์น™์˜ ๊ฒฝ์šฐ ํ•ด์‹ฑ์€ ์–ด์จŒ๋“  ์•ˆ์ „ํ•œ ์‹œ๊ฐ„์— ํฅ๋ฏธ๋กญ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

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

๋งˆ์ง€๋ง‰์œผ๋กœ #929์˜ ๊ตฌํ˜„์€ ์˜ตํŠธ์ธ์ด๋ฉฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค(if-๋ฌธ ์ œ์™ธ).

์˜ˆ๋ฅผ ๋“ค์–ด ๋งํฌ ๊ทœ์น™์˜ ๋ชจ๋“  ์ž…๋ ฅ์„ ํ•ด์‹ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์ง€๋งŒ ์†Œ์Šค ํŒŒ์ผ๊ณผ ์•Œ๋ ค์ง„ ์ข…์†์„ฑ์€ ์ข‹์€ ํ›„๋ณด์ž…๋‹ˆ๋‹ค.

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

๋„ˆ๋ฌด ๋Š๋ฆฐ ๊ฒฝ์šฐ(์˜ˆ: ํฐ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ) ์ค‘๊ฐ„ ํŒŒ์ผ์ด ์•„๋‹Œ ์ˆœ์ˆ˜ํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ๋งŒ ํ•ด์‹œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ตœ์†Œํ•œ "Git ๋ถ„๊ธฐ๋ฅผ ์ „ํ™˜ํ•˜๋ฉด ์ „์ฒด ์žฌ๊ตฌ์ถ•์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ญ์ƒ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋”์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

๋˜ํ•œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ญ์ƒ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋”์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ๋น„ํ•ด์‹ฑ์—์„œ ํ•ด์‹ฑ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŒŒ์ผ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ•ด์‹œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์Œ ์žฌ๊ตฌ์ถ•์—์„œ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์•„๋งˆ๋„ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊นƒ๋ฐœ์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋‚ ์งœ).

ํ•ด์‹œ๋Š” ์—ฌ์ „ํžˆ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ํ•ด์‹œ๋ฅผ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฒ˜์Œ ๋ช‡ ๊ฐœ์˜ ๋นŒ๋“œ๊ฐ€ ์ผ๋ถ€ ํŒŒ์ผ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํƒ€์ž„์Šคํƒฌํ”„ ํœด๋ฆฌ์Šคํ‹ฑ์ด ์˜ณ์Šต๋‹ˆ๋‹ค).

๋˜ํ•œ ์ง์žฅ์—์„œ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฐ ์„ฑ๊ณต์„ ๊ฑฐ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. #929๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ https://github.com/moroten/ninja/commits/hashed์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋งŽ์€ ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๊ทœ์น™์˜ hash_input = 1 ๋Š” ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ง€์ ์—๋Š” ์—ฌ์ „ํžˆ O(n) O(n^2) stat ์ด ๋„ˆ๋ฌด ์ž์ฃผ ์žˆ๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ๊ฐ€์งœ ๊ฐ€์žฅ์ž๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ ํ•ด์‹ฑ์„ ๋‹Œ์ž์˜ ์ผ๊ธ‰ ๋ฉค๋ฒ„๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด์‹œ๋ฅผ ๋นŒ๋“œ ๋กœ๊ทธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. SHA256์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ Bazel์˜ ์›๊ฒฉ ์‹คํ–‰ API์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. C++ ๊ตฌํ˜„์€ https://gitlab.com/bloomberg/recc/์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฝค ์ข‹์ง€ ์•Š์„๊นŒ์š”?

๋ถˆํ–‰ํžˆ๋„ ๊ฐ€์งœ ๊ฐ€์žฅ์ž๋ฆฌ์— ๋Œ€ํ•œ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋ฉด ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œํŽธ ์ €๋Š” Chromium์—์„œ ๋ถ„๊ธฐ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค). ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์€ Go ํ”„๋กœ๊ทธ๋žจ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฌ๊ธฐ: https://github.com/bromite/mtool

Chromium์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ž์œ ๋กญ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ๋นŒ๋“œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚ด ์‹คํ–‰์—๋Š” ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค). ์œ ์ผํ•œ ๋‹จ์ ์€ ๋‚ด๊ฐ€ ๊ฒŒ์‹œํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ git ์ €์žฅ์†Œ ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— .mtool ํŒŒ์ผ์ด ํฉ์–ด์ง€์ง€๋งŒ ์ „์—ญ gitignore ๋กœ๋Š” ์น˜๋ฃŒํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ด์‹ฑ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด git ls-files --stage ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์€ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ํ•ด๋‹น ํŒŒ์ผ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋„ ํ•ด์‹œํ•˜๋„๋ก git์— ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋œ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์ธก๋ฉด์—์„œ ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹Œ์ž๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ(git์— ์˜์กดํ•˜์ง€ ์•Š๊ณ ) ์œ ์‚ฌํ•œ ์„ฑ๋Šฅ ๊ฒฐ๊ณผ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‚ดํŽด๋ณด๊ธฐ ํ›„์— ํ•ด๋‹น ๋‹Œ์ž ํŒจ์น˜๋Š” ์ž…๋ ฅ ํŒŒ์ผ ์™ธ์— ์ปดํŒŒ์ผ๋Ÿฌ ๋ช…๋ น์ค„์„ ํ•ด์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ช…๋ น์ค„์€ ์ด๋ฏธ ninja์— ์˜ํ•ด ํ•ด์‹œ๋˜์–ด ๋นŒ๋“œ ๋กœ๊ทธ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ๋Š” ์—ฌ์ „ํžˆ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ํ•ด์‹œ๋ฅผ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฒ˜์Œ ๋ช‡ ๊ฐœ์˜ ๋นŒ๋“œ๊ฐ€ ์ผ๋ถ€ ํŒŒ์ผ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํƒ€์ž„์Šคํƒฌํ”„ ํœด๋ฆฌ์Šคํ‹ฑ์ด ์˜ณ์Šต๋‹ˆ๋‹ค).

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

Ninja๋Š” ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์ผ์น˜ํ•  ๋•Œ ์ด๋ฏธ ๋ชจ๋“  ์ž‘์—…์„ ๊ฐ€์ •ํ•˜๊ณ  ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ท€ํ•˜์˜ ์˜ˆ์—์„œ๋Š” ์–ด์จŒ๋“  ์ž˜๋ชป๋œ ๋นŒ๋“œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค(๋‚ด ๋ฌด์ง€๋กœ ์ธํ•ด). ์™œ ๊ทธ๋Ÿด๊นŒ์š”?

IMHO, ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์ผ์น˜ํ•  ๋•Œ ํ•ด์‹œ ๊ฒ€์‚ฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ํšจํ•œ ์ตœ์ ํ™”์ž…๋‹ˆ๋‹ค.

ํ•ด์‹œ ๊ฒ€์‚ฌ๋Š” Ninja๊ฐ€ ์ด๋ฏธ ์ œ๊ณตํ•œ ๊ธฐ์กด ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‹จ์ˆœํžˆ "๊ฑฐ์ง“ ๋”๋Ÿฌ์šด" ์žฌ๋นŒ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” false-dirty ์žฌ๋นŒ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ false-clean non-rebuilds์ž…๋‹ˆ๋‹ค. git checkout์€ ๋ฎ์–ด์“ฐ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์„ ํ„ฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ๋ณด๋‹ค ์ƒˆ๋กœ์šด ๋Œ€์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ, ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์–‘ํ•œ ์œ ํšจํ•œ ์ด์œ ๋กœ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค). ํ•ด์‹œ ๊ฒ€์‚ฌ๋Š” ์ด ๊ฒฝ์šฐ ๊ฑฐ์ง“ ์ฒญ์†Œ ๋น„ ์žฌ๊ตฌ์ถ•์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

@rulatir ๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์„ ๋Œ€๋ถ€๋ถ„ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :) ์ด๊ฒƒ์ด Bazel ๋ฐ ํ•ด์‹œ ๊ฒ€์‚ฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์‹ค์ œ๋กœ ํŠธ๋ฆฌ ๋‚ด ๋Œ€์ƒ ์ถœ๋ ฅ์— ๋ฐ˜๋Œ€๋˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ๋Œ€์ƒ์ด ์ด์ „์— ์•Œ๋ ค์ง„ ์‹œ๊ฐ„๋ณด๋‹ค ์ตœ์‹ ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„๊นŒ์š”?

@rulatir ๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์„ ๋Œ€๋ถ€๋ถ„ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :) ์ด๊ฒƒ์ด Bazel ๋ฐ ํ•ด์‹œ ๊ฒ€์‚ฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์‹ค์ œ๋กœ ํŠธ๋ฆฌ ๋‚ด ๋Œ€์ƒ ์ถœ๋ ฅ์— ๋ฐ˜๋Œ€๋˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ๋Š” ํŒŒ์ผ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์ง€๋‚˜์š”?

๊ทธ๋Ÿฌ๋‚˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ๋Œ€์ƒ์ด ์ด์ „์— ์•Œ๋ ค์ง„ ์‹œ๊ฐ„๋ณด๋‹ค ์ตœ์‹ ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„๊นŒ์š”?

ํƒ€์ž„์Šคํƒฌํ”„ ์‚ฌ์šฉ์˜ ์ฃผ์š” ์ด์ ์€ "์ด์ „์— ์•Œ๋ ค์ง„" ๋ฒ„์ „ ์„œ๋ช…์„ ์ถ”์ ํ•˜๋Š” ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ ํ˜œํƒ์„ ๊ธฐ๊บผ์ด ํฌ๊ธฐํ•œ๋‹ค๋ฉด ์™œ ๊ทธ ์„œ๋ช…์ด ํ•ด์‹œ๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

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