- ์ํ: Spec draft (2026-05-09) โ ๋ฏธ๊ตฌํ
- ์์ฑ์ผ: 2026-05-09
- ์ ํ RFC: RFC-017 (atlas ์ ์ ๋ด์ฅ + native compiler ์ ํ ๊ฒฐ์ )
- ๊ฒฐ์ (2026-05-09): backend ํ๋ณด (LLVM / C-transpile / ์ง์ codegen) ์ค ์ง์ codegen ์ฑํ
- ์ํฅ ์์ญ: ์ ์ค
compiler/ํธ๋ฆฌ,stdlib/diagnostics/*,stdlib/rt/*, ๊ธฐ์กดhexa_interp๋ stage0 ๋ถํธ์คํธ๋ฉ ์ฉ๋๋ก๋ง ์์กด
| ํ๋ณด | ์ฅ์ | ์ฝ์ | ์ฑํ? |
|---|---|---|---|
| LLVM | ์ต์ ํ ๊ฐ๋ ฅ, ๋ฉํฐํ๊ฒ | ๊ฑฐ๋ ์์กด (์๋ฐฑMB), ๋น๋ ์๊ฐ โ, atlas-aware hook ์ด๋ ค์, AI-native ์ ์ด ์ฝํจ | โ |
| C-transpile | ๋น ๋ฅธ ๋ถํธ์คํธ๋ฉ (clang๋ง ์์ผ๋ฉด) |
C ์ปดํ์ผ๋ฌ ์์กด ์ฌ์ฌ, ๋๋ฒ๊ทธ ๋งคํ ์์ค, atlas ์๋ฒ ๋ฉ ์ด์, ๋ณด์ surface โ | โ |
| ์ง์ codegen | ์ ์ด๊ถ 100%, ์์กด zero, atlas/diagnostic์ IR ๋ชจ๋ ๋จ๊ณ์์ ์ธ์ง, ๊ฒฐ์ ์ | ์ด๊ธฐ ๋ ธ๋ ฅ ๅคง, ์ต์ ํ ์ง์ ์์ฑ ํ์ | โ |
ํต์ฌ ์ด์ : hexa-lang์ atlas SSOT + ์์ ๊ฒ์ฆ + AI-native ๊ฐ ๋ณธ์ง. ์ธ๋ถ toolchain์ ์ด ์ธ์ง๋ฅผ IR ๊ฒฝ๊ณ์์ ์์. ์ง์ codegen์ ๋ชจ๋ ๋จ๊ณ๊ฐ atlas-aware.
.hexa source
โ lex (tokens)
โ parse (AST, atlas-tagged)
โ resolve (S0โS2) atlas ๋
ธ๋ / scope binding
โ check (S3โS5, S8) type / units / citation
โโโโโโโโโโโโโโ โ ์๋ฐ ์ abort, ๋ฐ์ด๋๋ฆฌ ์ ๋ง๋ฆ
โ lower HIR (typed)
โ mono generic monomorphization
โ ssa MIR (CFG, SSA)
โ optimize const-fold, dce, inline (๋ณด์์ )
โ regalloc LIR (target-specific)
โ emit asm text or machine code
โ link ELF (Linux) / Mach-O (macOS)
๊ฐ ๋จ๊ณ๋ hexa๋ก ์์ฑ๋ ๋ชจ๋. ๋ชจ๋ IR ๋ ธ๋๋ atlas-aware (P/C/L ์ธ์ฉ ์ ๋ณด๋ฅผ IR ๋๊น์ง ๋ณด์กด).
| Tier | Triple | ์ฐ์ ์์ | ๋น๊ณ |
|---|---|---|---|
| T0 | x86_64-linux-gnu |
1์ฐจ | ๋๋ถ๋ถ dev / CI |
| T1 | arm64-apple-darwin |
1์ฐจ | Apple Silicon dev |
| T2 | arm64-linux-gnu |
2์ฐจ | docker/runners (build/hexa_interp.linux ํ์) |
| T3 | wasm32-unknown-unknown |
ํ์์ | playground ์ฉ |
| T4 | riscv64-linux-gnu |
๋ณด๋์ค | ๊ฒ์ฆ์ฉ |
ํฌ๋ก์ค ์ปดํ์ผ์ stage1 ์ ์ฐฉ ํ ๋์ .
| ํ๊ฒ | ๊ท์ฝ |
|---|---|
| x86_64 Linux | System V AMD64 (rdi, rsi, rdx, rcx, r8, r9, ...) |
| arm64 macOS | AAPCS64 (x0โx7, ...) |
| arm64 Linux | AAPCS64 (๋์ผ) |
๊ท์น
- struct โค 16B by value, ๊ทธ ์ด์ by reference
- ๋ฐํ๊ฐ โค 16B by register, ๊ทธ ์ด์ hidden first arg
extern "C" fn์ ์ ABI ๋ฐ๋ฆextern "hexa" fn(๋ํดํธ)๋ ๊ฐ์ ABI๋ก ์์ โ ์ถํ hexa-๋ด๋ถ ์ต์ ํ (closure ์บก์ฒ ๋ฑ) ๊ฐ๋ฅ์ฑ ์ด์ด๋
์ต์ runtime, ์ ์ ๋งํฌ.
| ๋ชจ๋ | ์ฑ ์ | ๋น๊ณ |
|---|---|---|
rt/alloc |
mmap ๊ธฐ๋ฐ arena + bump | 1.x: gc ์์. 2.x: refcount (Swift/Rust Arc ๋ชจ๋ธ) ๊ฒํ |
rt/syscall |
direct syscall (Linux x86_64), libSystem (macOS) | libc ์์กด 0 (์ ํ ์ฌํญ) |
rt/panic |
stderr ๋ฉ์์ง + exit | no unwinding ์ด๊ธฐ |
rt/atlas |
์ ์ atlas ์ธ๋ฑ์ค (binary embed) | hash ํ ๊ฒ์ฆ |
rt/diag |
runtime panic ๋ฉ์์ง (RFC-019 catalog ์ผ๋ถ ํฌํจ) | binary embed |
rt/io |
print, read, file | ์ต์ |
ํฌ๊ธฐ ๋ชฉํ: stripped runtime โค 200 KB. atlas ์ ์ ์๋ฒ ๋ ํฌํจ ์ 2 MB ์ดํ.
๋น๋ ํ์
์ปดํ์ผ๋ฌ ๋น๋ ์ (one-time per compiler version):
1. ~/core/nexus/n6/atlas.n6 + atlas.append.*.n6 ๋จธ์ง
2. dedup, schema check, P/C/L hash ๊ณ์ฐ
3. packed binary form ์์ฑ (~1โ2 MB)
4. ์ปดํ์ผ๋ฌ ๋ฐ์ด๋๋ฆฌ .rodata ์น์
์ ์ ์ ์๋ฒ ๋
5. atlas SHA256 = ATLAS_HASH ์์
์ฌ์ฉ์ ๋น๋ ์
hexa build x.hexa
โ ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ atlas ์ธ๋ฑ์ค๋ก ์ฆ์ P[*]/C[*]/L[*] ๊ฒ์ฆ
โ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์ธ์ฉํ atlas ๋
ธ๋๋ค๋ง dead-code elim ํ
์ฌ์ฉ์ ๋ฐ์ด๋๋ฆฌ์ ์๋ฒ ๋ (reflect / `hexa explain` ์ฉ)
โ atlas ๋ฏธ์ฌ์ฉ ์ ์ฌ์ฉ์ ๋ฐ์ด๋๋ฆฌ์ atlas 0 byte ํฌํจ
drift ๊ฐ์ง
hexa.toml [atlas] hash = "a3f9..."๋ช ์ ์: ์ปดํ์ผ๋ฌ atlas hash์ mismatch โ ๋น๋ ์คํจ- ๋ฏธ๋ช ์ ์: ์ปดํ์ผ๋ฌ์ ๋ฐํ hash ์ฌ์ฉ
override (์ธ๋ถ ์ฌ์ฉ์)
hexa.toml [atlas] path = "..."โ ์ปดํ์ผ๋ฌ ๋น๋ ์ ๋ค๋ฅธ atlas ๋จธ์ง- ๋จ, ์ปดํ์ผ๋ฌ ์์ฒด ์ฌ๋น๋ ํ์
| Stage | ์ฐ์ถ๋ฌผ | ๋น๋ ๋๊ตฌ |
|---|---|---|
| Stage 0 | hexa๋ก ์์ฑ๋ minimal native compiler ์์ค | ๊ธฐ์กด hexa_interp (์ธํฐํ๋ฆฌํฐ) ๊ฐ ๋น๋ |
| Stage 1 | stage0๊ฐ ์ธํฐํ๋ฆฌํธํด์ emitํ native ์ปดํ์ผ๋ฌ ๋ฐ์ด๋๋ฆฌ | stage0 |
| Stage 2 | stage1 ์ปดํ์ผ๋ฌ๊ฐ ์๊ธฐ ์์ ์์ค๋ฅผ native ์ปดํ์ผ | stage1 |
| Stage 3 | stage2 ์ปดํ์ผ๋ฌ๊ฐ ์๊ธฐ ์์ โ self-hosted ์ ์ฐฉ | stage2 |
๊ฒ์ฆ
bytewise(stage2_binary, stage3_binary) == matchโ fixed point ๋๋ฌ- ์ผ์น ์ stage1, stage2 ํ๊ธฐ ๊ฐ๋ฅ
ํ๊ท
bench/bootstrap_e2e.hexaโ ๋งค PR์์ stage0โ3 ์ ์ฒด ์ฌํ- atlas hash drift, ์ปดํ์ผ๋ฌ hash drift ๋ชจ๋ ํ๊ท detect
| ํ๊ฒ | ํ์ |
|---|---|
| Linux | DWARF v4 (๋ผ์ธ ๋งคํ + ๋ณ์ + types) |
| macOS | DWARF in __DWARF segment + dsym ์ต์
|
์ถ๊ฐ hexa-specific ์น์
.hexa.atlasโ ์ฌ์ฉ๋ atlas ๋ ธ๋ hash ๋ฆฌ์คํธ.hexa.diagโ ์ปดํ์ผ ์ emit๋ hint ๋ฉ์์ง (์คํ ์ panic์ ๋๋ด).hexa.specโ@law/@implements์ด๋ ธํ ์ด์ ๋ฉํ
โ hexa explain <binary> ๊ฐ binary ์์ฒด์์ ์ ๋ณด ์ถ์ถ.
| ๋จ๊ณ | ๋์ |
|---|---|
| const folding | 1์ฐจ |
| dead code elimination | 1์ฐจ |
| inlining | 1์ฐจ (์์ ํจ์๋ง) |
| common subexpression elim | 2์ฐจ |
| loop invariant motion | 2์ฐจ |
| SROA (struct decompose) | 2์ฐจ |
| auto-vectorization | ํ์์ |
| LTO | ํ์์ |
| PGO | ํ์์ |
๋ชฉํ: 1์ฐจ hexa ์ปดํ์ผ๋ฌ๋ "์ ํํ๊ณ ์๊ณ ๋๋ฒ๊น ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ" ์ฐ์ . -O2 ์์ค์ stage3 ์ ์ฐฉ ํ.
| ๋จ๊ณ | ์ ๋ต |
|---|---|
| 1์ฐจ | system ld / lld ํธ์ถ (๊ฐ์ฅ ๋น ๋ฅธ ๋ถํธ์คํธ๋ฉ) |
| 2์ฐจ | ์์ฒด ์ ์ ๋ง์ปค hexa_ld โ ELF/Mach-O minimal emitter |
| 3์ฐจ | ์์ฒด ๋์ ๋ง์ปค๋ ๊ฒํ (hexa runtime ์๋ ํ๊ฒฝ์ฉ) |
ํ์ด๋ธ๋ฆฌ๋: hexa build --linker=system|hexa ํ๋๊ทธ.
extern "C" fn: System V/AAPCS ๊ทธ๋๋กextern "py" fn(RFC-016 import py): native ์ปดํ์ผ๋ฌ + Python embedded โlibpython3.so๋์ ๋งํฌ ๋๋ subprocess- atlas ๋ ธ๋ ์ธ์ฉ์ FFI ๊ฒฝ๊ณ์์ ๋ณด์กด (debug section ํตํด)
- inline asm ๋ฌธ๋ฒ (Rust
asm!๋งคํฌ๋ก ๋ชจ๋ธ? hexa-native?) - generic monomorphization vs dyn dispatch ๋ํดํธ
- async runtime (tokio ๋ชจ๋ธ vs go-routine ๋ชจ๋ธ)
- lifetime / borrow check (Rust strict vs gc-light)
- effect system (atlas L[*] ์ ๊ฒฐ์ํด effect๋ฅผ law๋ก?)
- linker ์์ฒด ์์ฑ ์์
- wasm32 backend ์ฐ์ ์์
- ์์ฒด ์ด์
๋ธ๋ฌ vs
as์ธ๋ถ ํธ์ถ
์ง์ codegen โ AST โ HIR โ MIR โ LIR โ mach 5๋จ IR, 1์ฐจ ํ๊ฒ x86_64-linux + arm64-darwin, runtime โค2MB (atlas ํฌํจ), bootstrap 4-stage (interp โ self-host). ๋ชจ๋ IR ๋จ๊ณ๊ฐ atlas-aware, ์ธ๋ถ toolchain ์์กด zero.