Skip to content

Latest commit

ย 

History

History
265 lines (189 loc) ยท 11.6 KB

File metadata and controls

265 lines (189 loc) ยท 11.6 KB

hexa-lang ์ƒˆ ๋ฐฉํ–ฅ, ์‰ฝ๊ฒŒ ํ’€์–ด์“ฐ๊ธฐ

๊ธฐ์ˆ  RFC: RFC-017 (atlas ๋‚ด์žฅ + strict lint), RFC-018 (์ง์ ‘ codegen), RFC-019 (์—๋Ÿฌ ๋ฉ”์‹œ์ง€) ์ด ๋ฌธ์„œ๋Š” ๊ฐ™์€ ๋‚ด์šฉ์„ ์š”๋ฆฌ์ฑ… ๋น„์œ ๋กœ ํ’€์–ด ์“ด ์ผ๋ฐ˜์ธ์šฉ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.


0. ๋“ฑ์žฅ์ธ๋ฌผ ๋น„์œ 

๊ธฐ์ˆ  ์šฉ์–ด ๋น„์œ 
hexa-lang ์š”๋ฆฌ ์–ธ์–ด. ์š”๋ฆฌ๋ฒ•(์ฝ”๋“œ)์„ ์ ๋Š” ๋ฐฉ์‹
atlas.n6 ๊ณต์‹ ์‚ฌ์ „ + ํ‘œ์ค€ ๋ ˆ์‹œํ”ผ์ง‘. "์ด ์žฌ๋ฃŒ, ์ด ์กฐ๋ฆฌ๋ฒ•, ์ด ๋ฒ•์น™" ๋ชจ๋‘ ์ •๋ฆฌ๋œ ํ•œ ๊ถŒ์˜ ์ฑ…
P / C / L ๋…ธ๋“œ ์‚ฌ์ „ ์•ˆ์˜ ํ•ญ๋ชฉ โ€” P๋Š” ์žฌ๋ฃŒ(์†Œ๊ธˆ, ๋ฌผ), C๋Š” ์—ฐ๊ฒฐ(์†Œ๊ธˆ+๋ฌผ=์†Œ๊ธˆ๋ฌผ), L์€ ๋ฒ•์น™(๊ฐ€์—ดํ•˜๋ฉด ๋“๋Š”๋‹ค)
hexa interp (ํ˜„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ) ์š”๋ฆฌ ์•ˆ๋‚ด์›. ์š”๋ฆฌ๋ฒ•์„ ํ•œ ์ค„์”ฉ ์ฝ์–ด์ฃผ๋ฉด์„œ ์˜†์—์„œ ์‹œํ‚ค๋Š” ์‚ฌ๋žŒ
native ์ปดํŒŒ์ผ๋Ÿฌ ์…ฐํ”„ ์ž์ฒด. ์š”๋ฆฌ๋ฒ•์„ ๋จธ๋ฆฟ์†์— ์™ธ์›Œ์„œ ๋ฐ”๋กœ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ
lint ํ’ˆ์งˆ ๊ฒ€์‚ฌ๊ด€. ์š”๋ฆฌ ์‹œ์ž‘ ์ „์— ์žฌ๋ฃŒ/๋‹จ์œ„ ์ ๊ฒ€
์ •์  ๋‚ด์žฅ ์‚ฌ์ „์„ ์…ฐํ”„ ๋จธ๋ฆฟ์†์— ํ†ต์งธ๋กœ ๋„ฃ์–ด๋‘๊ธฐ

1. ์ฒซ ๋ฒˆ์งธ ๊ฒฐ์ • โ€” "์‚ฌ์ „์„ ์–ด๋””์— ๋‘˜๊นŒ?"

์ง€๊ธˆ ์ƒํ™ฉ

atlas.n6์ด๋ผ๋Š” ๊ณต์‹ ์‚ฌ์ „์ด ๋”ฐ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค. 4.2 MB์งœ๋ฆฌ, 60,760์ค„, ๋งค์ผ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€๋Š” ์š”๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ๋„์„œ๊ด€ ๊ฐ€์„œ ์‚ฌ์ „์„ ๋นŒ๋ ค์˜ต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ์•ฝ 0.2์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ์ด๋ฉด 0.2์ดˆ๋‹ˆ๊นŒ ๊ดœ์ฐฎ์€๋ฐ, 100๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด 20์ดˆ, 5000๋ฒˆ์ด๋ฉด 17๋ถ„. ์ž๋™ ๊ฒ€์‚ฌ(CI)๋‚˜ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ(LSP)๋Š” ๋งค ํ‚ค ์ž…๋ ฅ๋งˆ๋‹ค ์‚ฌ์ „์„ ๋ด์•ผ ํ•ด์„œ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅ.

์„ธ ๊ฐ€์ง€ ์„ ํƒ์ง€

์„ ํƒ์ง€ ๋น„์œ  ์‹œ๊ฐ„
๋งค๋ฒˆ ๋„์„œ๊ด€ ๊ฐ€๊ธฐ ์‚ฌ์ „ ๋งค๋ฒˆ ๋นŒ๋ฆผ 0.2์ดˆ/ํšŒ โ€” CI 17๋ถ„
์ฑ…์ƒ์— ์‚ฌ๋ณธ ๋‘๊ธฐ mtime cache 0.001์ดˆ/ํšŒ โ€” ๋น ๋ฆ„
์…ฐํ”„๊ฐ€ ํ†ต์งธ๋กœ ์™ธ์›€ ์ •์  ๋‚ด์žฅ 0์ดˆ โ€” ๊ฑฐ์˜ ์ฆ‰์‹œ

๊ฒฐ์ •

์…ฐํ”„๊ฐ€ ์‚ฌ์ „์„ ํ†ต์งธ๋กœ ์™ธ์šด๋‹ค (์ •์  ๋‚ด์žฅ).

๊ทผ๋ฐ ์‚ฌ์ „์ด ๋งค์ผ ๋ฐ”๋€Œ์ž–์•„์š”? โ†’ ๊ทธ๋Ÿฌ๋ฉด ๋งค์ผ ์…ฐํ”„๋ฅผ ์ƒˆ๋กœ ๊ต์œก์‹œํ‚ต๋‹ˆ๋‹ค (CI๊ฐ€ ๋งค์ผ ์ปดํŒŒ์ผ๋Ÿฌ ์ž๋™ ์žฌ๋นŒ๋“œ). ์ผ๋ฐ˜ ์š”๋ฆฌ์‚ฌ๋“ค(์‚ฌ์šฉ์ž)์€ ์…ฐํ”„ ์ƒˆ ๋ฒ„์ „ ๋ฐ›์œผ๋ฉด ์ž๊ธฐ ์š”๋ฆฌ๋ฒ•๋„ ์ƒˆ๋กœ ์ ๊ฒ€๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


2. ๋‘ ๋ฒˆ์งธ ๊ฒฐ์ • โ€” "์•ˆ๋‚ด์› โ†’ ์…ฐํ”„"

์ง€๊ธˆ ์ƒํ™ฉ (์ธํ„ฐํ”„๋ฆฌํ„ฐ)

์š”๋ฆฌ๋ฒ•(.hexa ํŒŒ์ผ)์„ ์ ์œผ๋ฉด, ์•ˆ๋‚ด์›(hexa interp)์ด ํ•œ ์ค„์”ฉ ์ฝ์–ด์ฃผ๋ฉด์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋‚ด์›: "์Œ, ์ฒซ ์ค„์ด '์†Œ๊ธˆ 1g ๋„ฃ๊ธฐ' ๋„ค์š”. ๋„ฃ์—ˆ์–ด์š”?"
๋‹น์‹ :   "๋„ค."
์•ˆ๋‚ด์›: "์ด์ œ ๋‘ ๋ฒˆ์งธ ์ค„... ์–ด? ์ด ์žฌ๋ฃŒ๊ฐ€ ์‚ฌ์ „์— ์—†๋Š”๋ฐ์š”?"

์žฅ์ : ์ฆ‰์„์—์„œ ๊ณ ์น˜๊ธฐ ์‰ฌ์›€ ๋‹จ์ : ๋งค๋ฒˆ ์‚ฌ์ „์„ ๋“ค์ถฐ์•ผ ํ•ด์„œ ๋А๋ฆผ. ํฐ ๊ณต์žฅ(CI)์—์„œ๋Š” ์•ˆ ํ†ตํ•จ.

์ƒˆ ๋ฐฉํ–ฅ (native ์ปดํŒŒ์ผ๋Ÿฌ)

์š”๋ฆฌ๋ฒ•์„ ํ•œ ๋ฒˆ์— ์…ฐํ”„์—๊ฒŒ ํ†ต์งธ๋กœ ๋„˜๊น๋‹ˆ๋‹ค. ์…ฐํ”„๋Š” ๋จธ๋ฆฟ์† ์‚ฌ์ „์ด๋ž‘ ๋Œ€์กฐํ•ด์„œ

  • ์žฌ๋ฃŒ ๋น ์ง„ ๊ฑฐ ์žˆ๋‚˜?
  • ๋‹จ์œ„ ์•ˆ ๋งž๋Š” ๊ฑฐ ์žˆ๋‚˜?
  • ๋ฒ•์น™ ์œ„๋ฐ˜์ธ๊ฐ€?

๋‹ค ๊ฒ€์‚ฌํ•œ ๋‹ค์Œ, ์ด์ƒ ์—†์œผ๋ฉด ์š”๋ฆฌ๋ฒ•์„ ์™ธ์›Œ์„œ ์ž๋™์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋กœ๋ด‡์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค (= ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ).

์ด์ƒ์ด ์žˆ์œผ๋ฉด? ๋กœ๋ด‡ ์ž์ฒด๋ฅผ ์•ˆ ๋งŒ๋“ฆ. ์ฆ‰, ์š”๋ฆฌ ์‹œ์ž‘๋„ ๋ชป ํ•จ.

์ด๊ฑด TypeScript ์˜ tsc strict ์™€ ๊ฐ™์€ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. "ํƒ€์ž… ๊ฒ€์‚ฌ ํ†ต๊ณผ ๋ชป ํ•˜๋ฉด ๊ทธ๋ƒฅ ๋นŒ๋“œ ์‹คํŒจ, ์‹คํ–‰ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ."


3. ์„ธ ๋ฒˆ์งธ ๊ฒฐ์ • โ€” "๊ฒ€์‚ฌ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋นก์„ธ๊ฒŒ?"

Python์ฒ˜๋Ÿผ ๋ฌธ๋ฒ• ํ‹€๋ฆฌ๋ฉด ์ฆ‰์‹œ ์‹คํŒจํ•˜๋Š” ์ •๋„๊ฐ€ ์•„๋‹ˆ๋ผ, ์‚ฌ์ „๊ณผ ๋‹จ์œ„๊นŒ์ง€ ๋‹ค ๋งž์•„์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ฒ€์‚ฌ ์‚ฌ๋‹ค๋ฆฌ (8๋‹จ)

๋‹จ๊ณ„ ๋ฌด์—‡์„ ๊ฒ€์‚ฌ? ๋น„์œ 
S0 ๋ฌธ๋ฒ• (๊ด„ํ˜ธ, ์„ธ๋ฏธ์ฝœ๋ก ) ๊ธ€์”จ ์ž์ฒด๊ฐ€ ์ฝํžˆ๋‚˜?
S1 ์‚ฌ์ „์— ์žˆ๋Š” ์žฌ๋ฃŒ์ธ๊ฐ€? "์‹ ์„ ์ดˆ๋ž€?" โ€” ๊ทธ๋Ÿฐ ๊ฑฐ ์‚ฌ์ „์— ์—†์–ด์š”
S2 ๋ณ€์ˆ˜ ์„ ์–ธํ–ˆ๋‚˜? "๊ทธ๋ฆ‡ X" ๋ผ๋Š”๋ฐ X๊ฐ€ ๋ญ์ฃ ?
S3 ํƒ€์ž… ๋งž๋‚˜? ์ˆซ์ž์— ๊ธ€์ž ๋”ํ•˜๊ธฐ ์•ˆ ๋จ
S4 ๋„๋ฉ”์ธ (์Œ์ˆ˜/์–‘์ˆ˜/์ •์ˆ˜)? "์‚ฌ๋žŒ โˆ’3๋ช…"?
S5 ๋‹จ์œ„๊ฐ€ ๋งž๋‚˜? "๊ฑฐ๋ฆฌ + ์‹œ๊ฐ„"? ๊ทธ๋Ÿฐ ๋ง์…ˆ ์—†์–ด์š”
S6 ๊ณต์‹์ด ๋งž๋‚˜? (์„ ํƒ) E = mcยฒ ์ด๋ผ๋ฉด์„œ ๋ณธ๋ฌธ์€ E = m+c
S7 ์ˆ˜ํ•™์  ์ฆ๋ช…? (์„ ํƒ) Z3 ๊ฐ™์€ ๋„๊ตฌ๋กœ ์ •์‹ ์ฆ๋ช…
S8 ์ถœ์ฒ˜ ์ธ์šฉํ–ˆ๋‚˜? ๊ณต์‹ ์“ธ ๋•Œ "์•„์ธ์Šˆํƒ€์ธ์˜ ๋ฒ•์น™" ์ธ์šฉ ๋ˆ„๋ฝ

S0~S5, S8์€ ํ•ญ์ƒ ์ผฌ. S6, S7์€ ์‚ฌ์šฉ์ž๊ฐ€ @verify/@prove ๋ผ๊ณ  ํ‘œ์‹œํ•œ ๋ถ€๋ถ„๋งŒ ์ผฌ.

์šฐํšŒ ๊ฐ€๋Šฅํ•œ๊ฐ€?

๊ฑฐ์˜ ์•ˆ ๋จ. ๋ช…๋ น์ค„ ์˜ต์…˜์œผ๋กœ ๋„๋Š” ๊ฑด ์—†๊ณ , ์ฝ”๋“œ์— ๊ธฐํ•œ ๋งŒ๋ฃŒ ๋ผ๋ฒจ๋งŒ ํ—ˆ์šฉ:

@allow_unverified("legacy migration", until="2026-06-01")
fn old_thing() { ... }

โ†’ 6์›” 1์ผ ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๊ฒ€์‚ฌ ๊ฐ•์ œ. "๊ธ‰ํ•ด์„œ ์ผ๋‹จ ํ†ต๊ณผ์‹œํ‚ค๋˜, ์ง„์งœ ๊ณง ๊ณ ์ณ๋ผ"๋ผ๋Š” ์˜๋ฏธ.


4. ๋„ค ๋ฒˆ์งธ ๊ฒฐ์ • โ€” "์…ฐํ”„๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๊นŒ?"

์…ฐํ”„(=native ์ปดํŒŒ์ผ๋Ÿฌ) ๋งŒ๋“œ๋Š” ๋ฐ ์„ธ ๊ฐ€์ง€ ๊ธธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ›„๋ณด ๋น„์œ  ์žฅ๋‹จ์ 
LLVM ๊ฑฐ๋Œ€ํ•œ ๊ณต์šฉ ์ฃผ๋ฐฉ ๋นŒ๋ ค์“ฐ๊ธฐ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ฌด๊ฒ๊ณ , ์šฐ๋ฆฌ ์‚ฌ์ „ ์ธ์ง€ ์–ด๋ ค์›€
C ๋ณ€ํ™˜ ์ผ๋‹จ C๋กœ ๋ฒˆ์—ญํ•ด์„œ C์…ฐํ”„์—๊ฒŒ ๋„˜๊ธฐ๊ธฐ ์˜์กด์„ฑ ์‚ฌ์Šฌ, ๋””๋ฒ„๊น… ์–ด๋ ค์›€
์ง์ ‘ ๋งŒ๋“ค๊ธฐ ์šฐ๋ฆฌ ์ฃผ๋ฐฉ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง“๊ธฐ ๋ฌด๊ฒ์ง€๋งŒ 100% ์šฐ๋ฆฌ ํ†ต์ œ

๊ฒฐ์ •: ์ง์ ‘ ๋งŒ๋“ค๊ธฐ

์ด์œ : hexa-lang์˜ ํ•ต์‹ฌ์€ "์‚ฌ์ „(atlas)๊ณผ ์ˆ˜์‹ ๊ฒ€์ฆ". ์™ธ๋ถ€ ๋„๊ตฌ๋Š” ์ด ์ •๋ณด๋ฅผ ์ค‘๊ฐ„์— ์žƒ์–ด๋ฒ„๋ฆผ. ์šฐ๋ฆฌ ๋„๊ตฌ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์‚ฌ์ „์„ ์ธ์‹ํ•ด์•ผ ํ•จ.

์–ด๋–ป๊ฒŒ ์ง“๋‚˜?

์š”๋ฆฌ๋ฒ•์ด ์…ฐํ”„ ์•ˆ์—์„œ ๊ฑฐ์ณ๊ฐ€๋Š” ๋‹จ๊ณ„:

1. ์š”๋ฆฌ๋ฒ• ๊ธ€์ž ์ฝ๊ธฐ (lex)
2. ๋ฌธ๋ฒ• ๊ตฌ์กฐ๋กœ ์ •๋ฆฌ (parse)
3. ์‚ฌ์ „๊ณผ ๋Œ€์กฐ ๊ฒ€์‚ฌ (resolve, check)  โ† ์—ฌ๊ธฐ์„œ ํ‹€๋ฆฌ๋ฉด abort
4. ๋จธ๋ฆฟ์† ๋‹จ์ˆœํ•œ ํ˜•ํƒœ๋กœ ์ •๋ฆฌ (HIR/MIR)
5. ์†๋™์ž‘ ๋ช…๋ น์œผ๋กœ ๋ณ€ํ™˜ (LIR)
6. ์‹ค์ œ ๋™์ž‘ ๊ฐ€๋Šฅํ•œ ๋กœ๋ด‡์œผ๋กœ ์ถœ๋ ฅ (binary)

ํฌ๊ธฐ: ์…ฐํ”„ ์ž์ฒด โ‰ค 2MB (์‚ฌ์ „ 4.2MB ์••์ถ•ํ•ด์„œ 1~2MB๋กœ). ์™ธ๋ถ€ ๋„๊ตฌ ์˜์กด 0.

์…ฐํ”„๋ฅผ ์ฒ˜์Œ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€?

๋‹ญ๊ณผ ๋‹ฌ๊ฑ€ ๋ฌธ์ œ. ์…ฐํ”„๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์…ฐํ”„๊ฐ€ ํ•„์š”ํ•˜์ž–์•„์š”?

ํ•ด๊ฒฐ: 4๋‹จ๊ณ„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ

  1. Stage 0: ์ง€๊ธˆ ์žˆ๋Š” ์•ˆ๋‚ด์›(์ธํ„ฐํ”„๋ฆฌํ„ฐ)์ด ์…ฐํ”„ ๋งŒ๋“œ๋Š” ๋ฒ•(์†Œ์Šค์ฝ”๋“œ) ์ฝ๊ณ  ์‹คํ–‰
  2. Stage 1: ๊ทธ ๊ฒฐ๊ณผ๋ฌผ = 1์„ธ๋Œ€ ์…ฐํ”„
  3. Stage 2: 1์„ธ๋Œ€ ์…ฐํ”„๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ๋งŒ๋“ฆ = 2์„ธ๋Œ€
  4. Stage 3: 2์„ธ๋Œ€๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ๋งŒ๋“  ๊ฒฐ๊ณผ == 2์„ธ๋Œ€ โ†’ ์ •์ฐฉ

3์„ธ๋Œ€์™€ 2์„ธ๋Œ€๊ฐ€ ๋˜‘๊ฐ™์œผ๋ฉด "์•ˆ์ •"์ด๋ผ๋Š” ๋œป. ์ด๋•Œ๋ถ€ํ„ฐ ์•ˆ๋‚ด์›์€ ์€ํ‡ด.


5. ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ฒฐ์ • โ€” "์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ž˜ ๋ณด์—ฌ์ค„๊นŒ?"

์ข‹์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์˜ ๋ชจ๋ฒ”

  • Rust: ์ฝ”๋“œ+์œ„์น˜+ํ™”์‚ดํ‘œ+ํžŒํŠธ
  • TypeScript: ๋ชจ์•„ ๋ณด์—ฌ์ฃผ๊ธฐ, ์ •ํ™•ํ•œ ํƒ€์ž… ์ฐจ์ด
  • Elm: ๊ฐ€์žฅ ์นœ์ ˆ, ์˜ˆ์‹œ ๋™๋ด‰
  • Python: ์งง๊ณ  ๋ช…๋ฃŒ

โ†’ hexa๋Š” Rust + Elm ์นœ์ ˆํ•จ ๊ฒฐํ•ฉ.

๋ณด์ด๋Š” ๋ชจ์Šต

HexaError [HX1042] example/foo.hexa:42:11โ€“28
    let p = P[einstien-mass-energy]
                ^^^^^^^^^^^^^^^^^^^   atlas ๋…ธ๋“œ ์—†์Œ

    ์›์ธ: atlas a3f9...c2 ์— P ๋…ธ๋“œ `einstien-mass-energy` ์—†์Œ
    ์ถ”์ฒœ: P[einstein-mass-energy]    (์˜คํƒ€ 1๊ธ€์ž ์ฐจ์ด)
    ์ˆ˜์ •: hexa fix --apply HX1042 example/foo.hexa
    ์„ค๋ช…: hexa explain HX1042

ํ•ต์‹ฌ 5์š”์†Œ

  1. ์—๋Ÿฌ ์ฝ”๋“œ (HX1042) โ€” ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ
  2. ์ •ํ™•ํ•œ ์œ„์น˜ โ€” ๋ผ์ธ:์—ด, ํ™”์‚ดํ‘œ
  3. ์›์ธ โ€” ๋ฌด์—‡์ด ์™œ ํ‹€๋ ธ๋Š”์ง€
  4. ์ถ”์ฒœ โ€” "ํ˜น์‹œ ์ด๊ฑธ ์˜๋ฏธํ•˜์…จ๋‚˜์š”?"
  5. ์ž๋™ ์ˆ˜์ • โ€” hexa fix ๋ช…๋ น ํ•œ ์ค„๋กœ ํ•ด๊ฒฐ

"hexa-lang์ด ์ด๊ฑธ ๋น ๋ฅด๊ฒŒ ํก์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?" โ€” ์‚ฌ์šฉ์ž ์งˆ๋ฌธ ์ง์ ‘ ๋‹ต

์˜ˆ. 5์ถ•์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

์ถ• ์˜๋ฏธ ๋น„์œ 
A. atlas E ๋…ธ๋“œ ์—๋Ÿฌ๋„ ์‚ฌ์ „ ํ•ญ๋ชฉ "์‹ค์ˆ˜ ์‚ฌ๋ก€" ๋„ ์‚ฌ์ „์ด ๊ด€๋ฆฌ
B. catalog๊ฐ€ hexa๋กœ ์ž‘์„ฑ ์ƒˆ ์—๋Ÿฌ = ํŒŒ์ผ ํ•œ ์ค„ ์…ฐํ”„๊ฐ€ ์ž๊ธฐ ์‹ค์ˆ˜ ๋…ธํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Œ
C. i18n ๋ถ„๋ฆฌ ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ์™€ ๋กœ์ง ๋ถ„๋ฆฌ ํ•œ๊ตญ์–ด/์˜์–ด ํŒŒ์ผ๋งŒ ๊ฐˆ์•„๋ผ์›€
D. snapshot ํšŒ๊ท€ ๋ฉ”์‹œ์ง€ ๋ณ€๊ฒฝ ์ž๋™ ๊ฐ์ง€ ์‹ค์ˆ˜ ๋…ธํŠธ ๋ฐ”๋€Œ๋ฉด ์•Œ๋ฆผ
E. fix-it API ์ž๋™ ์ˆ˜์ • ๊ฐ€๋Šฅ "์ด๊ฑด 1ํ‚ค๋กœ ์ž๋™ ๊ณ ์นจ" ํ‘œ์‹œ

์ƒˆ ์—๋Ÿฌ 1๊ฑด ์ถ”๊ฐ€ ๋น„์šฉ: 5~7 ํŒŒ์ผ ์ˆ˜์ • / ์•ฝ 5๋ถ„.


6. ์ „์ฒด ๊ทธ๋ฆผ (ํ•œ ์žฅ)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๊ณต์‹ ์‚ฌ์ „ (atlas.n6, 4.2MB, ๋งค์ผ ๊ฐฑ์‹ )  โ”‚
โ”‚  P ์žฌ๋ฃŒ / C ์—ฐ๊ฒฐ / L ๋ฒ•์น™ / E ์—๋Ÿฌ       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚ ๋งค์ผ ์ž๋™ ํ•ฉ์ณ์„œ
       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ์…ฐํ”„ (hexa native ์ปดํŒŒ์ผ๋Ÿฌ)              โ”‚
โ”‚  ๋จธ๋ฆฟ์†์— ์‚ฌ์ „ ํ†ต์งธ๋กœ ์™ธ์›€ (์ •์  ๋‚ด์žฅ)    โ”‚
โ”‚  ์™ธ๋ถ€ ๋„๊ตฌ ์˜์กด 0                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚ ์‚ฌ์šฉ์ž ์š”๋ฆฌ๋ฒ•(.hexa)์„ ๋ฐ›์œผ๋ฉด
       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๊ฒ€์‚ฌ 8๋‹จ (S0~S8)                        โ”‚
โ”‚  ๋ฌธ๋ฒ•/์‚ฌ์ „/ํƒ€์ž…/๋‹จ์œ„/๊ณต์‹/์ธ์šฉ ๋ชจ๋‘ ๊ฒ€์‚ฌ โ”‚
โ”‚  ๋‹จ 1๊ฑด ์œ„๋ฐ˜ โ†’ ๋นŒ๋“œ ์‹คํŒจ, ๊ฒฐ๊ณผ๋ฌผ X       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚ ๋‹ค ํ†ต๊ณผํ•˜๋ฉด
       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ์š”๋ฆฌ ๋กœ๋ด‡ (์‹คํ–‰ ๋ฐ”์ด๋„ˆ๋ฆฌ)                โ”‚
โ”‚  ์‹คํ–‰ ์‹œ ์‚ฌ์ „ ๋‹ค์‹œ ์—ด ํ•„์š” ์—†์Œ (0ms)     โ”‚
โ”‚  ๋‹จ์ผ ํŒŒ์ผ, ์–ด๋””์„œ๋“  ์‹คํ–‰                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

7. ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ƒ์—์„œ ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ์ฐจ์ด

์ƒํ™ฉ ์ง€๊ธˆ (์ธํ„ฐํ”„๋ฆฌํ„ฐ) ์ƒˆ ๋ฐฉํ–ฅ (native + ์ •์  ๋‚ด์žฅ)
์ฝ”๋“œ ํ•œ ๋ฒˆ ์‹คํ–‰ "์ž ๊น, ์‚ฌ์ „ ์ข€ ๋ณผ๊ฒŒ์š”" 0.2์ดˆ ๋Œ€๊ธฐ ์ฆ‰์‹œ ์‹œ์ž‘
100๊ฐœ ํŒŒ์ผ ๊ฒ€์‚ฌ 20์ดˆ ๊ฑฐ์˜ ์ฆ‰์‹œ
CI 5000๊ฐœ ํŒŒ์ผ 17๋ถ„ ์ˆ˜์ดˆ
์ฝ”๋“œ ์—๋””ํ„ฐ ์ž๋™์™„์„ฑ 200ms ์ง€์—ฐ(์ฒด๊ฐ ๋ช…ํ™•) ์ฆ‰์‹œ
์‚ฌ์ „ ์—…๋ฐ์ดํŠธ ํ›„ ์ฆ‰์‹œ ๋ฐ˜์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์ž๋™ ์žฌ๋นŒ๋“œ ํ•œ ๋ฒˆ ํ›„ ๋ฐ˜์˜
๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋ฐฐํฌ ์‚ฌ์ „ ํŒŒ์ผ ๋™๋ด‰ ํ•„์š” ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•˜๋‚˜๋ฉด ๋
์—๋Ÿฌ ๋‚ฌ์„ ๋•Œ ํ•œ ์ค„์งœ๋ฆฌ ๋ฉ”์‹œ์ง€ ์œ„์น˜+์›์ธ+์ถ”์ฒœ+์ž๋™์ˆ˜์ •

8. ์ž ์žฌ์  ์šฐ๋ ค / ์†”์งํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

์šฐ๋ ค ๋Œ€์‘
์‚ฌ์ „ ๋งค์ผ ๋ฐ”๋€Œ๋Š”๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ๋„ ๋งค์ผ ์ƒˆ๋กœ? CI๊ฐ€ ์ž๋™. ์‚ฌ์šฉ์ž๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ›๊ธฐ๋งŒ ํ•จ (Rust deps update ๋ชจ๋ธ)
๊ฒ€์‚ฌ๊ฐ€ ๋„ˆ๋ฌด ๋นก์„ธ์„œ ์ฝ”๋“œ๊ฐ€ ์•ˆ ์ปดํŒŒ์ผ๋จ ๊ธฐ์กด ์ฝ”๋“œ๋Š” @allow_unverified(until="...") ๋ถ€์—ฌ, ์ ์ง„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
์ปดํŒŒ์ผ๋Ÿฌ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ? ๋„ˆ๋ฌด ํฐ ์ผ? ๋‹จ๊ณ„๋ณ„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ, 1์ฐจ ํƒ€๊ฒŸ์€ x86_64-linux + arm64-darwin๋งŒ
์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ฆ‰์„์„ฑ ์žƒ์Œ hexa run (์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ชจ๋“œ)์€ stage0๋กœ ์ž ์‹œ ์œ ์ง€, dev ์นœํ™”

9. ํ•œ ์ค„ ์š”์•ฝ

์‚ฌ์ „(atlas)์„ ์…ฐํ”„(์ปดํŒŒ์ผ๋Ÿฌ) ๋จธ๋ฆฟ์†์— ํ†ต์งธ๋กœ ๋„ฃ๊ณ , ์…ฐํ”„๊ฐ€ ์š”๋ฆฌ๋ฒ•(์ฝ”๋“œ)์„ ๋ฐ›์œผ๋ฉด ์‚ฌ์ „ยท๋ฌธ๋ฒ•ยท๋‹จ์œ„ยท๊ณต์‹ยท์ถœ์ฒ˜๋ฅผ ๋‹ค ํ™•์ธํ•œ ๋’ค ํ•œ ๊ฑด์ด๋ผ๋„ ํ‹€๋ฆฌ๋ฉด ์š”๋ฆฌ ์ž์ฒด๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋Ÿฌ๋ฉด ๋น ๋ฅด๊ณ (๋Ÿฐํƒ€์ž„ 0์ดˆ), ์•ˆ์ „ํ•˜๊ณ (ํ‹€๋ฆฐ ์ฝ”๋“œ ์‹คํ–‰ ๋ถˆ๊ฐ€), ์ž์œจ์ (์™ธ๋ถ€ ๋„๊ตฌ ์˜์กด 0)์ธ ์–ธ์–ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.