Compiler Generated Repairs - kimjooyoon/meta-ontology-go GitHub Wiki

Gooo๋กœ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ

2026-10-03 ์•ˆ๋‚ด: ์•„๋ž˜ ์˜ˆ์ œ์™€ ๊ด€์ธก์€ ๊ฐ ์ ˆ์— ๊ณ ์ •๋œ ์†Œ์Šคยท๋„๊ตฌ์ฒด์ธ์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฐ”๋”” ์ƒ์„ฑ๊ณผ ์ž์ฒด ์†Œํ˜• ๋ชจ๋ธ์˜ ํ๋ฆ„์€ ๋ชจ๋ธ๊ณผ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ง€๊ธˆ ์‚ฌ์šฉํ•  ๋ฒ„์ „์€ ํ˜„์žฌ ์ƒํƒœ์™€ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Gooo์˜ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ์— ์ด๋ฆ„ํ‘œ๋ฅผ ๋ถ™์ด๋Š” ๋ฐ์„œ ๋๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์›๋ณธ์˜ ์–ด๋–ค ๋™์ž‘์„ ๋ฐ”๊ฟ€์ง€ ์„ ์–ธํ•˜๊ณ , ๊ทธ ์„ ์–ธ์— ์—ฐ๊ฒฐ๋œ ์ˆ˜์ • ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์‹ค์Šต์—์„œ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ๋ชปํ–ˆ๋Š”๋ฐ๋„ ์„ฑ๊ณต์œผ๋กœ ๋ณด๊ณ ํ•˜๋˜ CLI ๋™์ž‘์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Gooo๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” JSON ์ถœ๋ ฅ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•ด, ์‚ฌ๋žŒ์ด ์ฝ๋Š” ์ถœ๋ ฅ ๊ฒฝ๋กœ์˜ ์ˆ˜์ • ํ›„๋ณด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ›„๋ณด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ๊ณผ ๊ทธ ํ›„๋ณด๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์ผ์€ ๋ถ„๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ง€์› ๊ธฐ์ค€: ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜์˜ #851 ๋ณ‘ํ•ฉ๋ณธ, go-error-guard:v1. ์‹คํ—˜์  ์ปดํŒŒ์ผ๋Ÿฌ ํ”„๋กœํ•„๊ณผ ์˜ˆ์ œ ์–ด๋Œ‘ํ„ฐ์ด๋ฉฐ, ๊ณต๊ฐœ ๋ฆด๋ฆฌ์Šค ์ „์ฒด์˜ ์ง€์› ์•ฝ์†์ด๋‚˜ ์ƒˆ๋กœ์šด ๋ฒ”์šฉ ๋ฆฌํŒฉํ„ฐ๋ง ๋ช…๋ น์€ ์•„๋‹™๋‹ˆ๋‹ค.

1. ๋ฌด์—‡์„ ํ•ด๊ฒฐํ•˜๋‚˜์š”?

๊ณ„์‚ฐ์„ ๋๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ถœ๋ ฅ ๋Œ€์ƒ์ด ๋‹ซํ˜”๋Š”๋ฐ CLI๊ฐ€ ์ข…๋ฃŒ ์ฝ”๋“œ 0์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ํ˜ธ์ถœ์ž๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์•˜๋‹ค๊ณ  ์˜คํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ๋ก€์˜ ๋ชฉํ‘œ๋Š” ๋ชจ๋“  ์‹คํ–‰์„ ์„ฑ๊ณต์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ „๋‹ฌ์— ์‹คํŒจํ–ˆ์„ ๋•Œ ์‹คํŒจ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Œ€๋กœ ์ง€์ผœ์•ผ ํ•˜๋Š” ๊ฒƒ ๋ฐ”๋€Œ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ
์ •์ƒ ์ถœ๋ ฅ์˜ ๋‚ด์šฉ๊ณผ ๊ธฐ์กด JSON ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์‚ฌ๋žŒ์šฉ ์ถœ๋ ฅ์—์„œ ๋ฒ„๋ ค์ง€๋˜ ์“ฐ๊ธฐ ์˜ค๋ฅ˜
์„ ํƒํ•˜์ง€ ์•Š์€ ์›๋ณธ ๊ตฌ๊ฐ„ ๊ทธ ์“ฐ๊ธฐ ํ˜ธ์ถœ์— ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ๊ฐ„
๊ธฐ์กด ๊ฒ€์‚ฌ์˜ ๊ธฐ๋Œ€๊ฐ’ ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๋˜ ์‹ค์ œ ๋™์ž‘

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

2. ์‹คํ–‰ํ•  ํ™˜๊ฒฝ๊ณผ ์ž…๋ ฅ

Go 1.27.0์„ ์‚ฌ์šฉํ•œ ์ €์žฅ์†Œ์˜ CI ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…๊ณผ ๋ถ„๋ฆฌ๋œ ์ฒดํฌ์•„์›ƒ์—์„œ ๋ณ‘ํ•ฉ๋œ ๋ฒ„์ „์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git clone https://github.com/kimjooyoon/meta-ontology-go.git gooo-guard-lab
cd gooo-guard-lab
git checkout ba8a8d5250e1b2ccdf87a495eb7930a7ef082614

์‹ค์Šต ์ž…๋ ฅ์€ internal/meta/policycompilation/testdata/go-error-guard/original.go.golden์ž…๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ a97a102... ๋ฒ„์ „์˜ ์‹ค์ œ Go ํŒŒ์ผ์„ ๋ณด์กดํ•œ fixture์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ CLI๋ฅผ ์ผ๋ถ€๋Ÿฌ ๊ณ ์น˜๊ฑฐ๋‚˜ ๋ง๊ฐ€๋œจ๋ฆฌ๋Š” ์‹ค์Šต์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๊ณ ์ •๋œ ์‹๋ณ„๊ฐ’์€ ์ด ์ž…๋ ฅ์—๋งŒ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐํ•จ์ด ์ด๋ฏธ ์ˆ˜์ •๋œ ํ˜„์žฌ ๊ตฌํ˜„์„ ๊ฐ™์€ ์‹๋ณ„๊ฐ’์œผ๋กœ ๋„ฃ์œผ๋ฉด ์›๋ณธ ๋ถˆ์ผ์น˜๋กœ ๊ฑฐ์ ˆ๋˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‹๋ณ„๊ฐ’์„ ๋ชฐ๋ž˜ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ๊ทธ ๊ฑฐ์ ˆ์„ ์ˆ˜์ • ์™„๋ฃŒ๋กœ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. ์ˆ˜์ •ํ•  ๋Œ€์ƒ์„ Gooo๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค

์ถœ๋ ฅ์šฉ ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ Gooo ์ž…๋ ฅ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

work="$(mktemp -d)"
cat > "$work/guard.gooo" <<'GOOO'
package goerrorguard
namespace goerrorguard
entity Source id "gooo://error-guard/source"
entity Candidate id "gooo://error-guard/candidate"
activity GuardWrite(Source) -> Candidate computes "go-error-guard:v1;function=writeSourcePackageResult;writer=stdout;diagnostic=stderr;source=sha256:5bd27e33e18e8c5dc87f25c0cd4004ee370cfa7dc441c85d89bb03fd333a8937;handler=sha256:16406e2ee9ce1a70c1541170c698ca69219afc39dd56aae66c54d7cc64ff2a93"
GOOO

๊ธด computes ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„ ์–ธ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ฃผ๋Š” ์„ ํƒ
Source, Candidate ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด ๋ฌด์—‡์„ ์ƒ์„ฑํ•˜๋Š”๊ฐ€
GuardWrite ๊ทธ ๋‘˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…
go-error-guard:v1 ์ ์šฉํ• , ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋œ ๋ณ€ํ™˜ ๊ทœ์น™
function ์ˆ˜์ • ๋Œ€์ƒ ํ•จ์ˆ˜
writer, diagnostic ๊ฒฐ๊ณผ์™€ ์ง„๋‹จ ๋ฉ”์‹œ์ง€๋ฅผ ์“ฐ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜
source ์ž…๋ ฅ Go ํŒŒ์ผ ์ „์ฒด ๋ฐ”์ดํŠธ์˜ ์‹๋ณ„๊ฐ’
handler ๋ณต์‚ฌํ•  ๊ธฐ์กด ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ธ”๋ก์˜ ์‹๋ณ„๊ฐ’

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

ํ•ด์‹œ๋Š” ์ด ์ž…๋ ฅ์ด ์–ด๋А ์ž…๋ ฅ์ธ์ง€ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ช…, ์ž‘์„ฑ์ž ์‹ ๋ขฐ, ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์˜ ์ฆ๋ช…๊นŒ์ง€ ๋Œ€์‹ ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

4. ์ˆ˜์ • ํ›„๋ณด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฝ์Šต๋‹ˆ๋‹ค

์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ์˜ˆ์ œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

go run ./examples/meta-policy-compilation/go-error-guard \
  -program "$work/guard.gooo" \
  -source ./internal/meta/policycompilation/testdata/go-error-guard/original.go.golden \
  > "$work/proposal.json"

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

๊ฒฐ๊ณผ์—์„œ ๋‹ค์Œ์„ ์ฝ์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ ์ฝ๋Š” ๋ฐฉ๋ฒ•
state PROPOSED์ด๋ฉด ํ›„๋ณด๊ฐ€ ์ƒ์„ฑ๋๋‹ค๋Š” ๋œป
candidate_source ์‹ค์ œ ์ƒ์„ฑ๋œ Go ์ฝ”๋“œ
edit_start, edit_end ์›๋ณธ์˜ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ”์ดํŠธ ๊ตฌ๊ฐ„, ๋ ์œ„์น˜๋Š” ์ œ์™ธ
program_digest, semantic_digest Gooo ์ž…๋ ฅ๊ณผ ์˜๋ฏธ ๋ชจ๋ธ์˜ ์‹๋ณ„๊ฐ’
source_digest, candidate_digest ์›๋ณธ๊ณผ ์ƒ์„ฑ ์ฝ”๋“œ์˜ ์‹๋ณ„๊ฐ’
admission.state ๋…๋ฆฝ๋œ ๊ฒ€์ฆยท์ฑ„ํƒ ๊ทผ๊ฑฐ๊ฐ€ ์—†๋‹ค๋ฉด UNKNOWN
mutation_authority, promotion_authority ์ด ํ›„๋ณด์˜ ์ž๋™ ์ˆ˜์ •ยท์Šน๊ฒฉ ๊ถŒํ•œ์€ ๊ฐ๊ฐ 0

ํ›„๋ณด ์ƒ์„ฑ ์„ฑ๊ณต๊ณผ ์ฑ„ํƒ ์—ฌ๋ถ€ UNKNOWN์€ ๋ชจ์ˆœ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‚ธ ์‚ฌ์‹ค๊ณผ ๊ทธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค๋Š” ํŒ๋‹จ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

ํ˜ธ์ถœ ํ˜•์‹์€ ๋ณ‘ํ•ฉ๋œ ์–ด๋Œ‘ํ„ฐ ๊ตฌํ˜„์— ๊ทผ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์‹คํ–‰ ์ฆ๊ฑฐ๋Š” CI์˜ ์ปดํŒŒ์ผ๋Ÿฌ API์™€ ์‹ค์ œ CLI ํŒจํ‚ค์ง€ ๊ฒ€์ฆ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์˜ ์…ธ ์‹ค์Šต ์ „์ฒด๋ฅผ ๋ณ„๋„ ์‚ฌ์šฉ์ž ์„ธ์…˜์—์„œ ์‹คํ–‰ํ–ˆ๋‹ค๋Š” ์ฆ๊ฑฐ๋กœ ๋ฐ”๊พธ์–ด ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

5. ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ๋‹ฌ๋ผ์กŒ๋‚˜์š”?

#851์˜ native CI๋Š” ๊ฐ™์€ ํ™œ์„ฑ CLI ํ…Œ์ŠคํŠธ ์›๋ณธ์„ ๊ณ ์ •ํ•œ ๋’ค, ์›๋ž˜ ๊ตฌํ˜„๊ณผ ์ƒ์„ฑ๋œ ํ›„๋ณด๋ฅผ ๊ฐ๊ฐ Go ๋นŒ๋“œ overlay๋กœ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ง์ ‘ ๋ฎ์–ด์“ด ์‹คํ—˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ณ ์ •๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์›๋ณธ ๊ฒ€์‚ฌ ์ƒ์„ฑ ํ›„๋ณด ๊ฒ€์‚ฌ
์‚ฌ๋žŒ์šฉ ๊ฒฐ๊ณผ์˜ ์“ฐ๊ธฐ๋ฅผ ๊ฑฐ์ ˆํ•˜๋Š” ์ถœ๋ ฅ ๋Œ€์ƒ FAIL PASS
JSON ๊ฒฐ๊ณผ์˜ ์“ฐ๊ธฐ๋ฅผ ๊ฑฐ์ ˆํ•˜๋Š” ์ถœ๋ ฅ ๋Œ€์ƒ PASS PASS
์ •์ƒ์ ์ธ ์‚ฌ๋žŒ์šฉ ๊ฒฐ๊ณผ ์ถœ๋ ฅ PASS PASS
JSON ํŒจํ‚ค์ง€ ๊ฒฐ๊ณผ์˜ ๋ฐ”์ดํŠธ ๋™์ผ ์žฌ์‹คํ–‰ PASS PASS
ํ•ฉ๊ณ„ 3 PASS / 1 FAIL 4 PASS / 0 FAIL

์ฒซ ํ–‰์˜ PASS๋Š” ์ถœ๋ ฅ์ด ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋œป์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ถœ๋ ฅ ์‹คํŒจ๋ฅผ ์š”๊ตฌํ•œ ์‚ฌ๋ก€์—์„œ CLI๊ฐ€ ์‹คํŒจ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณด๊ณ ํ–ˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ์›๋ณธ 1, ์ƒ์„ฑ ํ›„๋ณด 0์œผ๋กœ ๊ด€์ธก๋์Šต๋‹ˆ๋‹ค.

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

์ •ํ™•ํ•œ ์ž…๋ ฅ๊ณผ CI ๊ทผ๊ฑฐ๋ฅผ ๋” ๊นŠ๊ฒŒ ์ถ”์ ํ•˜๊ธฐ
  • ๊ฒ€์‚ฌ๋œ PR head: 1147138e038ef56862af488a5a932152cef53620.
  • ์ƒ์„ฑ ํ”„๋กœ๊ทธ๋žจ: sha256:f3ac58d6b47a055aa19fddc6ad848134446003b870d3cbfe59036e5217039b1e.
  • ์˜๋ฏธ IR: sha256:37f2dd73d819730bca2665d413dc60b595544d561f1f88d50b29007def16e2ee.
  • ์›๋ณธ: sha256:5bd27e33e18e8c5dc87f25c0cd4004ee370cfa7dc441c85d89bb03fd333a8937.
  • ์ƒ์„ฑ ํ›„๋ณด: sha256:e65ab82fed6b572ae14098255273fa43df4e34551c5275e44655e60aaa5ddf9d.
  • ํ™œ์„ฑ ํ…Œ์ŠคํŠธ ์›๋ณธ ์ง‘ํ•ฉ: sha256:6f948a474af349fee2a4655b2ee3ad9b1c44854e6bc9bc98513997190ee113ba.
  • ์ƒ์„ฑยท์‹คํ–‰ artifact 10336683386์˜ test.json์—์„œ gooo guard witness์™€ TestGoErrorGuardGeneratedCandidateUsesFrozenNativeOracle๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ •์ƒ ๋ณ‘ํ•ฉ๊ณผ ์ตœ์ข… CI ํŒ์ • ๊ธฐ๋ก์€ ๊ธฐ๋Šฅ ์‚ฌ๋ก€์˜ ๊ฒฐ๊ณผ์™€ ์ „์ฒด ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ ์ˆ˜์šฉ์„ ๋ถ„๋ฆฌํ•ด์„œ ๋‚จ๊น๋‹ˆ๋‹ค.

์ด ์‹คํ–‰์€ ํ™œ์„ฑ CLI ํ…Œ์ŠคํŠธ ์›๋ณธ 112๊ฐœ์™€ ์ด๋ฆ„์ด ์ง€์ •๋œ ๋Ÿฐํƒ€์ž„ Gooo ์ž…๋ ฅ 2๊ฐœ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์‹๋ณ„๊ฐ’์ด ์ „์ฒด ์˜์กด์„ฑยท์šด์˜ ํ™˜๊ฒฝ์„ ๋ชจ๋‘ ํฌ๊ด„ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GitHub artifact์˜ ๋ณด์กด ๊ธฐ๊ฐ„์€ ์œ ํ•œํ•˜๋ฏ€๋กœ ๋งํฌ๋ฅผ ์˜๊ตฌ์ ์ธ ๋ฐฐํฌ๋ฌผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

6. UNKNOWN์ด๋ฉด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋‚˜์š”?

๊ฒฐ๊ณผ ์˜๋ฏธ ๋‹ค์Œ์— ํ•  ์ผ
PROPOSED + ์ฑ„ํƒ UNKNOWN ํ›„๋ณด๋Š” ์žˆ์œผ๋‚˜ ๋ณ„๋„ ๊ฒ€์ฆ ๊ทผ๊ฑฐ๊ฐ€ ์—†์Œ ๊ณ ์ •ํ•œ ๊ธฐ๋Œ€๊ฐ’์œผ๋กœ ํ›„๋ณด๋ฅผ ๊ฒ€์ฆ
UNKNOWN ํ•จ์ˆ˜๊ฐ€ ์—†๊ฑฐ๋‚˜, ์„ ํƒ์ด ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜, ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ˜•ํƒœ ๊ธฐ๋ก๋œ ์›์ธ๊ณผ ๋‹ค์Œ ์—ฐ์‚ฐ์„ ์ฝ๊ธฐ
REFUTED ์›๋ณธยท์ฒ˜๋ฆฌ ๋ธ”๋ก์˜ ์‹๋ณ„๊ฐ’ ๋“ฑ์ด ์„ ์–ธ๊ณผ ๋ชจ์ˆœ๋จ ์ž˜๋ชป ์—ฐ๊ฒฐ๋œ ์ž…๋ ฅ์„ ์กฐ์‚ฌํ•˜๊ณ  ์ƒˆ ์‹œ๋„๋ฅผ ๋ณ„๋„๋กœ ๊ธฐ๋ก

UNKNOWN์—๋Š” stage, step, reason, unknown_class, next_operation, blocked_by๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๋ณด๊ณ  ์›์ธ์„ ์ถ”์ธกํ•˜๊ธฐ๋ณด๋‹ค ์–ด๋А ๋‹จ๊ณ„์—์„œ ๋ฌด์—‡์ด ์—†์–ด ๋ฉˆ์ท„๋Š”์ง€ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœํ•„์—์„œ ์›๋ณธ pin ๋ถˆ์ผ์น˜๋Š” ๋‹จ์ˆœํ•œ ์ฆ๊ฑฐ ๋ˆ„๋ฝ์ด ์•„๋‹ˆ๋ผ REFUTED์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ˆ˜์ • ์ „๋žต์„ ์‹œ๋„ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์„ฑ๊ณต์‹œํ‚ค๋ ค๊ณ  ๊ฒ€์ฆ ๊ธฐ์ค€์„ ๋‚ฎ์ถ”๊ฑฐ๋‚˜ ๊ธฐ์กด ์‹คํŒจ ๊ธฐ๋ก์„ ์ง€์šฐ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฝ๊ธฐ์™€ ๊ณ ์ •๋œ ๋ชฉํ‘œ๋กœ ์„ ํƒํ•˜๊ธฐ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•˜์„ธ์š”.

7. ์–ด๋–ค Go ์ฝ”๋“œ๊นŒ์ง€ ์ง€์›ํ•˜๋‚˜์š”?

v1์€ ์ž์œ  ํ•จ์ˆ˜์ด๋ฉฐ ์ œ๋„ค๋ฆญ์ด ์•„๋‹ˆ๊ณ , ๊ฒฐ๊ณผ๊ฐ€ int ํ•˜๋‚˜์ธ ํ˜•ํƒœ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๊ฒฐ๊ณผยท์ง„๋‹จ ์ถœ๋ ฅ์€ ์„œ๋กœ ๋‹ค๋ฅธ io.Writer ๋งค๊ฐœ๋ณ€์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ ‘ํ•œ ๋ถ„๊ธฐ์—์„œ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์“ฐ๊ธฐ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ, ์ง„๋‹จ ์ถœ๋ ฅ, ๋ฐ˜ํ™˜์„ ์ฐพ๊ณ , ์„ ํƒ๋œ ํ˜•์ œ ๋ถ„๊ธฐ์˜ ๋ฒ„๋ ค์ง„ fmt.Fprintf ๊ฒฐ๊ณผ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ž„์˜์˜ ์ธํ„ฐํŽ˜์ด์Šค, closure, ๋ณต์žกํ•œ ์ œ์–ด ํ๋ฆ„์„ ์•Œ์•„์„œ ํ•ด์„ํ•˜๋Š” ๋ฒ”์šฉ ์ˆ˜์ •๊ธฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ชจ์–‘์€ ํ›„๋ณด๋ฅผ ์–ต์ง€๋กœ ๋งŒ๋“ค์–ด ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๋งŒ ํ•˜๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๋กœ์ปฌ writer ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” v2๋Š” ์ปดํŒŒ์ผ๋Ÿฌ PR #854์˜ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ๋ณธ 1c0d251...์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. Gooo ์ˆ˜์ • ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ์—์„œ ๊ทธ ๋ณ‘ํ•ฉ ๋ฒ„์ „์— ๋งž๋Š” ์„ ์–ธ๊ณผ ์ž…๋ ฅ, ์ง€์› ๊ฒฝ๊ณ„, ์‹ค์ œ ๋‹ค์„ฏ ์‚ฌ๋ก€์˜ ์‹คํ–‰ ๊ทผ๊ฑฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ณต๊ฐœ CLI์— ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒฝ๋กœ๋Š” PR #853์—์„œ ๋ณ„๋„๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์˜ v1 ์ž…๋ ฅ๊ณผ v2์˜ ์›๋ณธยทํ”„๋กœ๊ทธ๋žจ ์‹๋ณ„๊ฐ’์€ ์„œ๋กœ ๋ฐ”๊พธ์–ด ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

8. ์ด๊ฒƒ์ด ์ž๊ธฐ๊ฐœ์„ ๊ณผ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๋‚˜์š”?

์‹ค์ œ ์‹คํŒจ ๊ด€์ธก
  -> Gooo๋กœ ๋Œ€์ƒ๊ณผ ์ˆ˜์ • ์กฐ๊ฑด ์„ ์–ธ
  -> ์›๋ณธ๊ณผ ์˜๋ฏธ IR์— ์—ฐ๊ฒฐ๋œ ์ฝ”๋“œ ํ›„๋ณด ์ƒ์„ฑ
  -> ๊ณ ์ •๋œ ๊ธฐ๋Œ€๊ฐ’์œผ๋กœ ๋ณ„๋„ ์‹คํ–‰ ๊ฒ€์ฆ
  -> ์ •ํ•ด์ง„ ๊ถŒํ•œ ์•ˆ์—์„œ ์ฑ„ํƒ ๋˜๋Š” ๊ธฐ๊ฐ
  -> ๋‹ค์Œ ์‹คํ–‰์ด ์ฑ„ํƒ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ ์‚ฌ์šฉ

์ดˆ๊ธฐ์˜ ์‹ค์ œ ์˜ค๋ฅ˜ ์ˆ˜์ • #849๋Š” ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ์ž‘์„ฑํ•œ Go ์ฝ”๋“œ์˜€์Šต๋‹ˆ๋‹ค. ๋’ค์— ์ถ”๊ฐ€ํ•œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์œผ๋กœ ๊ทธ ๊ณผ๊ฑฐ ์ˆ˜์ •๊นŒ์ง€ ์–ธ์–ด๊ฐ€ ์ž์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๊ณ  ๋‹ค์‹œ ์ด๋ฆ„ ๋ถ™์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ดํ›„์—๋Š” ์ƒ์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ ๊ตฌํ˜„์— ๋“ค์–ด๊ฐ€๊ณ , CI์™€ ๋‹ค์Œ ์‹คํ–‰์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์›์‹œ ์ƒ์„ฑ๋ฌผ ๋’ค์— ํ˜•์‹ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์›์‹œ ํ›„๋ณด, formatter ์ž…๋ ฅยท์ถœ๋ ฅ, ์ตœ์ข… ํ›„๋ณด์˜ ์‹๋ณ„๊ฐ’์„ ๋”ฐ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด #853์€ Gooo ์ƒ์„ฑ ๊ตฌ๊ฐ„์˜ ์ ์šฉ๊ณผ CI๊ฐ€ ์ œ๊ณตํ•œ ํ˜•์‹ ๋ณด์ •์„ ๊ตฌ๋ถ„ํ•ด์„œ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์–ธ์–ด๊ฐ€ ํ›„๋ณด๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์Šค์Šค๋กœ ๋ณ‘ํ•ฉํ•˜๊ฑฐ๋‚˜ ํ‰๊ฐ€ ๊ธฐ์ค€์„ ๋ฐ”๊ฟ€ ๊ถŒํ•œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ›„๋ณด ์ƒ์„ฑ, ์‹คํ–‰ ์ฆ๊ฑฐ, ์ฑ„ํƒ, ๋ฐฐํฌ, ๋‹ค์Œ ์‚ฌ์šฉ์€ ๊ฐ๊ฐ ๋ณ„๋„์˜ ์‚ฌ๊ฑด์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ณผ์ •๋„ ์ด provenance์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธยท์‹คํ–‰ ๋น„์šฉยท์žฌ์‚ฌ์šฉ ยท Provenance์™€ ๊ฒฐ์ • ยท ๊ฑฐ๋ฒ„๋„Œ์Šค์™€ ๊ธฐ์—ฌ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ