Gooo Source Assembly - kimjooyoon/meta-ontology-go GitHub Wiki

Gooo ์„ ์–ธ ์•ˆ์— ๋ณธ๋ฌธ ์กฐ๋ฆฝ ์˜๋„ ์ ๊ธฐ

2026-10-06: ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ณธ๋ฌธ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

PR #1267์—์„œ source_fill์˜ ๊ฐ ๊ตฌ๋ฉ์ด ์ž์‹ ์˜ ํ›„๋ณด ๋ฌธ๋ฒ•์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ฑด๊ณผ ์ •์ˆ˜ ๋ฐ˜ํ™˜๊ฐ’์ฒ˜๋Ÿผ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ํ‘œํ˜„์„ ํ•จ๊ป˜ ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

derive assignments max_candidates "16" {
    hole "condition" grammar "integer-predicate/v1" max_expressions "8"
    hole "yes" grammar "integer-offset-constant/v1" max_expressions "2"
}

integer-predicate/v1์€ true, false์™€ ํ›ˆ๋ จ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๋น„๊ต ํ›„๋ณด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. integer-offset-constant/v1์€ ์ž…๋ ฅ๊ฐ’ ์ฃผ๋ณ€์˜ ์ •์ˆ˜ ํ‘œํ˜„์‹์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ›„๋ณด๋ฅผ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•œ ๋’ค ํƒ€์ž…๊ณผ ์„ ์–ธ๋œ ์‚ฌ๋ก€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์ด ์™„์„ฑ ํ›„๋ณด์—์„œ ์„ ํƒํ•˜๊ณ , ๋ชจ๋ธ์ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฒฐ์ •๋ก ์  ์„ ํƒ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

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

PR #1267์€ ํ•„์ˆ˜ ์—ฌ์„ฏ CI ์ฒดํฌ ํ›„ dev์— ๋ณ‘ํ•ฉ๋๊ณ , ์ •ํ™•ํ•œ ํŠธ๋ฆฌ ์Šค๋ƒ…์ƒท PR #1268๋กœ main์— ๋ฐ˜์˜๋์Šต๋‹ˆ๋‹ค. ์ด ์กฐ๋ฆฝ ๊ฒฝ๋กœ์˜ ์ด๋ฒˆ ์˜ˆ์ œ ์‹คํ–‰์€ ๊ฒฐ์ •๋ก ์ ์ด์—ˆ๊ณ , ์‹ค์ œ Laya ์‘๋‹ต ์‹œ๊ฐ„์€ ์ธก์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์Œ ๊ฐœ๋ฐœ์— ๋‹ค์‹œ ์“ฐ๊ธฐ

๊ฐœ๋ฐœ #1217์„ CI์™€ ๋…๋ฆฝ ์ฆ๊ฑฐ ํ™•์ธ ํ›„ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. main #1218์ด ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•œ PR์ž…๋‹ˆ๋‹ค. main f62eb5f0๋กœ CLIยท์‹คํ–‰๊ธฐ๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ–ˆ๊ณ  CI37190298986์˜ ํ•„์ˆ˜ ์—ฌ์„ฏ ๊ฒ€์‚ฌยท์ „์ฒด ์‹คํ–‰๊ณผ ๋…๋ฆฝ ์ฆ๊ฑฐ๊ฐ€ ๋ชจ๋‘ PASS์˜€์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑํ•œ Gooo ๋ณธ๋ฌธ์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์„ ํƒ๋œ ๋ณธ๋ฌธ์„ ์›๋ณธ์— ๋„ฃ์œผ๋ฉด ์ง€์—ญ๊ฐ’์˜ ๋Œ€์•ˆ ์ด๋ฆ„๊ณผ ์œ„์น˜๊ฐ€ ์–ด๊ธ‹๋‚˜ ๋‹ค์Œ ์ƒ์„ฑ์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‹œ์ž‘ ๋ณธ๋ฌธ baseline, ์„ ํƒํ•œ ๊ฒฝ๋กœ picked, ํ˜„์žฌ ์‹คํ–‰ํ•  ๋ณธ๋ฌธ computes๋ฅผ ํ•จ๊ป˜ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ค€ ์ง€๋„์™€ ๊ทธ ์ง€๋„์—์„œ ๊ณ ๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์™„์„ฑํ•œ ์ž‘์—…๋ฌผ ์˜†์— ๋†“๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

gooo body-codegen --json --activity Qualified \
  examples/body-codegen/source-assembly.gooo.fixture > /tmp/generation.json
gooo body-realize --source examples/body-codegen/source-assembly.gooo.fixture \
  --generation /tmp/generation.json --out /tmp/gooo-realized
gooo body-codegen --json --activity Qualified /tmp/gooo-realized/realized.gooo

์ƒ์„ฑ JSON์˜ gooo_source๋Š” ์„ ํƒ๋œ ํ™œ๋™์„ ๋ฐ˜์˜ํ•œ Gooo ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. body-realize๋Š” ์„ ํƒยท์ƒ์„ฑ ์ฝ”๋“œยท์œ ํ•œ ์‹คํ–‰ ๊ด€์ธก์„ ์žฌ๊ตฌ์„ฑํ•œ ๋’ค ์›๋ณธ๊ณผ ๊ธฐ๋ก, realized.gooo, realization.json์„ ์ƒˆ ํด๋”์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ์ถ”๊ฐ€๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ฎ์€ ์™„์ „์„ฑ๋„ ๊ทธ๋Œ€๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. baseline๊ณผ picked๋Š” ๊ตฌ๋ฌธยท์˜๋ฏธ ์ค‘๊ฐ„ ํ‘œํ˜„ยท์–‘๋ฐฉํ–ฅ ๋ณ€ํ™˜์— ํ•จ๊ป˜ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ณธ๋ฌธ์œผ๋กœ ๊ณ„ํš์„ ๋ฐ”๊พธ๋ ค๋ฉด ๊ธฐ์กด ๋‘ ํ•„๋“œ๋ฅผ ์ง€์šฐ๊ณ  ํ˜„์žฌ computes๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒ ์œ„์น˜์™€ ์˜ˆ์‹œ๋ฅผ ๋งž์ถฅ๋‹ˆ๋‹ค.

์‹ค์ œ ์ž์ฒด ๋ชจ๋ธ์„ ์“ด ๋‘ ๊ณผ์ œ ร— ๋ชจ๋ธ/๊ฒฐ์ •๋ก  ร— ์„ธ ๋ฒˆ์˜ ์—ฐ์† ์ƒ์„ฑ์—์„œ 12ํšŒ ์ƒ์„ฑ, ์„ ํƒ 48/48, ๋ณ„๋„ ์‹คํ–‰ 108/108, ์‹ค์ œ ์‹คํ–‰ 24ํšŒ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฒฝ๋กœ๋Š” ์ €์žฅ ํ›„ ๋‘ ๋ฒˆ ๋‹ค์‹œ ์ƒ์„ฑํ•ด๋„ GoooยทGoยท๊ณ„ํš ์ง€๋ฌธ์ด ์œ ์ง€๋์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ƒ์„ฑ์€ ์ด ์—ฌ์„ฏ ๋ฒˆ ์ถ”๋ก ํ–ˆ๊ณ  ์—ด๋‘ ๋ฒˆ ์ €์žฅ ๊ณผ์ •์˜ ์ถ”๋ก ์€ 0๋ฒˆ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๊ฐ€์ค‘์น˜๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ ์ƒˆ ํ•™์Šต๊ณผ Laya ํ˜ธ์ถœ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ๊ฒฝ๋กœ์˜ ์ƒ์„ฑ ์ค‘์•™๊ฐ’์€ ๋‘ ๊ณผ์ œ์—์„œ 15.696msยท13.214ms, ์ €์žฅ์€ 15.738msยท13.984ms์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์ƒˆ ๋ช…๋ น์„ ์‹œ์ž‘ํ•˜๊ณ  ๋ชจ๋ธ/์ž๋ฃŒ๋ฅผ ์ฝ๋Š” ๋น„์šฉ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๋นŒ๋“œ์™€ ๋‘ ๋ฒˆ ์‹คํ–‰์˜ ์ค‘์•™๊ฐ’์€ 319.398msยท310.140ms์˜€์Šต๋‹ˆ๋‹ค. ์„ธ ๊ด€์ธก์”ฉ ๊ณ ์ • ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ–ˆ๊ณ  ๋นŒ๋“œ ์บ์‹œ๊ฐ€ ์žˆ์–ด ์†๋„ ๊ฐœ์„  ํŒ๋‹จ์—๋Š” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ž์ฒด ์ถ”๋ก ์€ 19.75โ€“32.88ยตs, ์ƒ์„ฑ ๊ณผ์ • ์ตœ๋Œ€ RSS๋Š” 20.0โ€“21.02MiB์˜€์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ „์ฒด CPU ์ฆ๊ฐ€๋Ÿ‰์€ ๊ด€์ธกํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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

์„ค์น˜๋œ main f62eb5f0์—์„œ๋„ ๊ฐ™์€ ์—ด๋‘ ๋ฒˆ์˜ ์ƒ์„ฑยท์ €์žฅยท๋‹ค์Œ ์ƒ์„ฑ๊ณผ ์‹ค์ œ ์‹คํ–‰์„ ๋‹ค์‹œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ 48/48ยท๋ณ„๋„ ์‹คํ–‰ 108/108, ์‹ค์ œ ๋ชจ๋ธ ํŒ๋‹จ ์—ฌ์„ฏ ๋ฒˆ๊ณผ ์ €์žฅ ๊ณผ์ • ํŒ๋‹จ 0๋ฒˆ์ด์—ˆ์œผ๋ฉฐ ์•ž์„  ๊ด€์ธก์˜ GoooยทGoยท๊ณ„ํšยท๋ชจ๋ธ ์ž…๋ ฅ ์ง€๋ฌธ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋ณ‘๋ ฌ ์‹คํ–‰๊ธฐ๋„ ์ž‘์—…์ž ๋‘ ๊ฐœ๋กœ ๋ชจ๋ธ/๊ฒฐ์ •๋ก  ์š”์ฒญ ์—ฌ๋Ÿ ๊ฐœ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๊ณ  ์‹คํ–‰ ๊ธฐ๋Œ€๊ฐ’ 72/72์™€ ์ •์ƒ EOF ์ข…๋ฃŒ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ด€์ธก์—์„œ ๊ต์ฐฉ์€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

2026-10-04. ๋ณธ๋ฌธ๊ณผ ์กฐ๋ฆฝ ๊ทœ์น™์„ ํ•จ๊ป˜ ์ž‘์„ฑํ•˜๋Š” assembling์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. Gooo์˜ ๊ตฌ๋ฌธ, ์˜๋ฏธ ์ค‘๊ฐ„ ํ‘œํ˜„, ์–‘๋ฐฉํ–ฅ ๋ณ€ํ™˜๊ณผ ์‹คํ–‰ ๋ช…๋ น์ด ์ด ์„ ์–ธ์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ #1215ยทmain #1216๋ฅผ ๊ฐ CIยท๋…๋ฆฝ ์ฆ๊ฑฐ ํ™•์ธ ํ›„ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. main 8a08adbb์—์„œ CLI์™€ ๋ณ„๋„ ์‹คํ–‰๊ธฐ๋ฅผ Go1.27.1ยทSDK21๋กœ ํ•จ๊ป˜ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์„ค์น˜์˜ CLI ์—ฌ๋Ÿ ์š”์ฒญ๊ณผ ๋ณ‘๋ ฌ ์‹คํ–‰๊ธฐ ์—ฌ๋Ÿ ์š”์ฒญ์€ ์ œ๊ณตํ•œ ์‹คํ–‰ ๊ธฐ๋Œ€๊ฐ’ 144/144, ์‹ค์ œ ์‹คํ–‰ 32ํšŒ์™€ ์ •์ƒ EOF ์ข…๋ฃŒ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์„ค๊ณ„๋„ ์˜†์— ์ž‘์€ ์กฐ๋ฆฝ ๋ฉ”๋ชจ์™€ ์ธก์ •ํ‘œ๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. computes๊ฐ€ ์‹œ์ž‘ํ•  ๋ณธ๋ฌธ์„ ๋‹ด๊ณ , choice๊ฐ€ ๋ฐ”๊ฟ” ๋ณผ ๋ถ€๋ถ„, intent๊ฐ€ ํ•œ์˜ ์ง€์‹œ, case๊ฐ€ ํ™•์ธํ•  ์ž…์ถœ๋ ฅ, attempts๊ฐ€ ์‚ดํŽด๋ณผ ํ›„๋ณด ์ˆ˜๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค.

์ž‘์€ ์„ ์–ธ ์ฝ๊ธฐ

package offsets
namespace offsets
entity Integer id "offsets://integer"
activity Offset(Integer) -> Integer computes "return input - 2" assembling {
    choice "offset-order" operand_order at "0" intent "2์—์„œ ์ž…๋ ฅ์„ ๋บ€๋‹ค. Subtract input from two."
    case "-1" -> "3"
    case "4" -> "-2"
    attempts "2"
}

์—ฌ๊ธฐ์„œ๋Š” ์ฒซ ๋บ„์…ˆ์˜ ํ”ผ์—ฐ์‚ฐ์ž ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ ๋ณธ๋ฌธ์€ input-2์ด๊ณ , ์„ ์–ธํ•œ ๋‘ ์˜ˆ์‹œ๋ฅผ ์ถฉ์กฑํ•˜๋Š” ๋ณธ๋ฌธ์€ 2-input์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‘ ํ›„๋ณด๋ฅผ ํƒ€์ž…์ด ์ •ํ•ด์ง„ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์˜ˆ์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ์—ฐ๊ฒฐํ•˜๋ฉด ๊ทธ ์ˆœ์„œ๋ฅผ ์ œ์•ˆํ•˜๋ฉฐ, ์ƒ๋žตํ•˜๋ฉด ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ํ›„๋ณด๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ์„ offset.gooo๋กœ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

gooo body-codegen --json --activity Offset offset.gooo
gooo body-context --include-plan --activity Offset offset.gooo

์ €์žฅ์†Œ ์˜ˆ์ œ๋ฅผ ๊ณง๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ธฐ

์ปดํŒŒ์ผ๋Ÿฌ ์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์น˜๋œ Go1.27.1์„ ์ฐพ์•„ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ๋ณ„๋„ ๊ธฐ๋Œ€๊ฐ’์˜ ์‹ค์ œ ์ถœ๋ ฅ์„ ๋‘ ๋ฒˆ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

gooo body-path-run \
  --source examples/body-codegen/source-assembly.gooo.fixture \
  --activity Clamp \
  --cases examples/body-codegen/source-assembly-clamp-cases.json \
  --repeat 2 --timing --out clamp-results

gooo body-path-run --verify-timing --out clamp-results

--out์€ ์ƒˆ ํด๋”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ, ์ƒ์„ฑ Go, ์„ ํƒ ๊ฒฐ๊ณผ, ์‹ค์ œ ์‹คํ–‰๊ณผ ์‹œ๊ฐ„ ๊ธฐ๋ก์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ณธ๋ฌธ์„ ๋‹ค์‹œ ๋งŒ๋“ค๋ฉด ๋ณด๊ด€ํ•œ ์‹คํ–‰ํŒŒ์ผ์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉฐ ํ˜„์žฌ ์ž…๋ ฅ์˜ ์‹คํ–‰์€ ๋‹ค์‹œ ๊ด€์ธกํ•ฉ๋‹ˆ๋‹ค. Clamp๋Š” ์Œ์ˆ˜๋ฅผ 0, 0๋ถ€ํ„ฐ 10๊นŒ์ง€๋ฅผ ์ž…๋ ฅ๊ฐ’, 10๋ณด๋‹ค ํฐ ๊ฐ’์„ 10์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฒ”์œ„ ์กฐ๋ฆฝ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

body-codegen์—๋Š” --path-model /path/to/model.json, ํŒŒ์ผ ์‹คํ–‰์—๋Š” --model /path/to/model.json์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ด€์ธก์€ ๊ณต๊ฐœ ์—ฐ๊ตฌ ์ €์žฅ์†Œ์˜ models/own-three-feedback-v1/set-feedback/models/fp32/model.json์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ์ง€์› ์„ ํƒ ์ˆ˜์™€ ์ž…๋ ฅ ์˜ˆ์‚ฐ์„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณ„๋„ ์‹คํ–‰๊ธฐ ์š”์ฒญ๋„ ๊ฐ™์€ ์„ ์–ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ™œ๋™์— assembling์ด ์žˆ์œผ๋ฉด ์ŠคํŠธ๋ฆผ์˜ document๋ฅผ ์ƒ๋žตํ•˜๊ณ  execution_cases์— ๋ณ„๋„ ์‹คํ–‰ ๊ธฐ๋Œ€๊ฐ’์„ ์ค๋‹ˆ๋‹ค. ์ƒ์„ฑ ํ›„ ๊ณง๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์กด --execute์™€ ๋ณ‘๋ ฌ ์ž‘์—…์ž ๊ฒฝ๋กœ๋ฅผ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋””๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‚˜

์„ ํƒ ์ข…๋ฅ˜ ๋ฐ”๊ฟ” ๋ณผ ๋ถ€๋ถ„
operand_order ์ดํ•ญ ์—ฐ์‚ฐ์˜ ํ”ผ์—ฐ์‚ฐ์ž ์ˆœ์„œ
local_reference ์ฝ๋Š” ์ง€์—ญ๊ฐ’, alternative์— ๋Œ€์•ˆ ์ด๋ฆ„ ์ง€์ •
assignment_target ๋Œ€์ž…ํ•˜๋Š” ์ง€์—ญ๊ฐ’, alternative์— ๋Œ€์•ˆ ์ด๋ฆ„ ์ง€์ •
branch_layout ์กฐ๊ฑด์˜ ๋ถ„๊ธฐ ๊ตฌ์„ฑ
root_order ์ธ์ ‘ํ•œ ๋‘ ๋ณธ๋ฌธ ๋ฌธ์žฅ์˜ ์ˆœ์„œ

at์€ ํ•ด๋‹น ์ข…๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ์œ„์น˜๋ฅผ 0๋ถ€ํ„ฐ ์„ผ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ณธ๋ฌธ ํŽธ์ง‘์œผ๋กœ ์œ„์น˜๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜๋„์™€ ์˜ˆ์‹œ๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ญ ์ •์ˆ˜ยท๋ถˆ๋ฆฌ์–ธ, ์กฐ๊ฑด์‹, ๋Œ€์ž…, ์ค‘์ฒฉ ๋ถ„๊ธฐ์™€ else if๋ฅผ ํ˜„์žฌ Integerโ†’Integer ๋ณธ๋ฌธ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค๋Š” ์ตœ๋Œ€ 128KiB, ํ‘œํ˜„์‹๊ณผ ๋ฌธ์žฅ์€ ๊ฐ๊ฐ 128์นธ, ์ค‘์ฒฉ ๊นŠ์ด๋Š” 16์ž…๋‹ˆ๋‹ค. ์„ ํƒ์ง€ 1โ€“16๊ฐœ, ์‚ฌ๋ก€ 1โ€“128๊ฐœ, ํƒ์ƒ‰ ํ›„๋ณด 1โ€“64๊ฐœ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™œ๋™ ์•ˆ์˜ ์กฐ๋ฆฝ ์„ ์–ธ์ด ์ „์ฒด ๊ณ„ํš์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ --path-plan์ด๋‚˜ ์ŠคํŠธ๋ฆผ document๋ฅผ ํ•จ๊ป˜ ์ฃผ๋ฉด ์ถฉ๋Œ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„ ์–ธ์ด ์—†๋Š” ํ™œ๋™์—์„œ๋Š” ๊ธฐ์กด ์™ธ๋ถ€ ๋ ˆ์‹œํ”ผ๋„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ด€์ธก๊ณผ ๋‹ค์Œ ๊ฐœ์„ 

๋‘ ๊ณผ์ œ์—์„œ ์„ ์–ธ ๋ฐฉ์‹ยท์™ธ๋ถ€ ๊ณ„ํš ๋ฐฉ์‹, ์ž์ฒด ๋ชจ๋ธยท๊ฒฐ์ •๋ก ์„ ๋„ค ๋ฒˆ์”ฉ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ณ€๊ฒฝ ํŠธ๋ฆฌ์˜ ํ›„๋ณด 0f7ec4c0, macOS arm64ยทGo1.27.1์—์„œ ๊ด€์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. 32ํšŒ ์ƒ์„ฑ์—์„œ ์„ ํƒ ์‚ฌ๋ก€๋Š” 128/128, ๋ณ„๋„ ์‹คํ–‰ ์‚ฌ๋ก€๋Š” 288/288์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ณผ์ œยท๋ชจ๋“œ์˜ ๋ชจ๋ธ ์ž…๋ ฅ๊ณผ ์ƒ์„ฑ Go๋Š” ๋‘ ์ž‘์„ฑ ๋ฐฉ์‹์—์„œ ์ผ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณผ์ œ ๋ชจ๋ธ ์ฒซ ํ›„๋ณด ๋ชจ๋ธ ๊ฒ€์‚ฌ ํ›„๋ณด ๊ฒฐ์ •๋ก  ์ฒซ ํ›„๋ณด ๊ฒฐ์ •๋ก  ๊ฒ€์‚ฌ ํ›„๋ณด
์ง€์—ญ๊ฐ’ยท์กฐ๊ฑด ์กฐ๋ฆฝ 0/5 3 1/5 2
๋ฒ”์œ„ ๋ถ„๊ธฐ ์กฐ๋ฆฝ 1/3 4 3/3 1

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

์„ ์–ธ ๋ฐฉ์‹์˜ ๋ชจ๋ธ ์—ฐ๊ฒฐ ๋ฐ˜๋ณต ์‘๋‹ต ์ค‘์•™๊ฐ’์€ ์•ฝ 27โ€“29ms, ๊ณต๋™ ๋ชจ๋ธ ํŒ๋‹จ์€ ์•ฝ 20ยตs์˜€์Šต๋‹ˆ๋‹ค. ์ฒซ ์š”์ฒญ์€ ๋นŒ๋“œ๋ฅผ ํฌํ•จํ–ˆ๊ณ , ๋ฐ˜๋ณต ์š”์ฒญ์€ ์‹คํ–‰ํŒŒ์ผ์„ ์žฌ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ ์–ธ ํ™•์ธ์˜ ๋น„์šฉ๋„ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋ช…๋ น์˜ CPU ์‹œ๊ฐ„/๋ฒฝ ์‹œ๊ฐ„์€ ํ•œ ์ฝ”์–ด ๊ธฐ์ค€ 62.1โ€“81.0%, ์ตœ๋Œ€ RSS๋Š” 82.48โ€“83.48MiB์˜€์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผยท์‹คํ–‰์„ ํฌํ•จํ•˜๋Š” ๊ฐ’์ด๋ฉฐ ๋ชจ๋ธ ํ…์„œ๋Š” 74,624๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ์ „์ฒด CPU ์ฆ๊ฐ€๋Ÿ‰์€ ๊ด€์ธกํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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

์œ„ ๋น„๊ต ์‹คํ—˜๊ณผ ๋ณ„๋„๋กœ, ์ƒˆ ์„ค์น˜๋ณธ์˜ ๋ชจ๋ธ ์žฌ์‚ฌ์šฉ ์‘๋‹ต์€ ์ง€์—ญ๊ฐ’ ์˜ˆ์ œ 34.745ms, ๋ฒ”์œ„ ์˜ˆ์ œ 33.816ms์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ ์ˆ˜์น˜๋Š” ๋ฐ˜๋ณต ์š”์ฒญ ํ•œ ๊ฑด์˜ ๊ด€์ธก์ž…๋‹ˆ๋‹ค. ์ฒซ ์š”์ฒญ์€ ๊ฐ๊ฐ 497.687ยท532.473ms๋กœ ๋นŒ๋“œ๋ฅผ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ๋ฒ„์ „๊ณผ ๊ฒ€์‚ฌ ๊ทผ๊ฑฐ.

๋ณ„๋„ ํ›„์† ์‹คํ—˜์—์„œ๋Š” ์ฒซ ํ›„๋ณด์˜ 0/5 ์‹คํŒจ์™€ ์‹ค์ œ ๊ฐœ๋ฐœ CI์˜ PASS ์ƒํƒœ๋ฅผ ๋‹ค์‹œ ๋ชจ๋ธ ๋ฌธ๋งฅ์— ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์š”์ฒญ์ด ๊ฐ๊ฐ ๊ณต๋™ ํŒ๋‹จ ๋‘ ๋ฒˆยทํ›„๋ณด ๋‘ ๊ฐœ๋ฅผ ๊ฒ€์‚ฌํ•ด ์„ ํƒ 5/5์™€ ๋ณ„๋„ ์‹คํ–‰ 11/11์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. CI ์ƒํƒœ์˜ ํšจ๊ณผ๋Š” ๋ณ„๋„๋กœ ๋น„๊ตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋‹ค๋ฅธ ์˜ˆ์ œ์˜ ๊ธฐ๋Œ€๊ฐ’์„ ์„ž์–ด ์–ป์€ ๋‘ ์š”์ฒญ์˜ 1/11๋„ ๊ฐ™์€ ๋ถ€๋ก์— ๋ณด์กดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ›„์† ์‹คํ—˜์€ ์œ„ 32ํšŒ ์ง‘๊ณ„์™€ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ›„์† ๋ฌธ๋งฅ๊ณผ ์ž…๋ ฅ ์‹ค์ˆ˜์˜ ์›๋ณธ.

๋ฌธ๋ฒ•ยท๋ฒ”์œ„ ยท ๋ชจ๋“  ๊ด€์ธก๊ณผ ์žฌํ˜„ ยท ๋ชจ๋ธ ์นด๋“œ