← 목록
기타 2026-06-20 2KB 읽기 3분

네이티브 코드젠 착수 평가 (toau2c → ARM/RISC-V/WASM)

메인 코디네이터가 직접 평가·de-risk한 결과. 임베디드·웹·LLM의 공통 출구.

검증된 현 상태

  • toau2c → C → 호스트 네이티브: 작동 (제곱(7)+제곱(3): 인터프리터 58 == 네이티브 58, 직접 확인).
  • 자산: toau2c.c(11.7KB) · runtime_stub.c/.h(3.5KB) · toau2c-build.sh. 생성 C = /tmp/toau2c_prog.c.
  • 툴체인 보유: arm-none-eabi-gcc 16.1.0 · riscv64-elf-gcc · qemu-system-arm (실행 가능).

정밀 갭 (좁음)

  1. arm-none-eabi-gcc = 컴파일러만 (newlib/libc.a/crt0/rdimon.specs 없음) → 베어메탈 freestanding 필요.
  2. 생성 C·runtime_stub은 printf/fprintf/puts/fopen 0개 사용 — 불필요한 #include <stdio.h>만 있음. 출력은 비-stdio 경로(write/syscall 추정).
  3. WASM: emcc·clang wasm32 타깃 미설치 (별도: brew install emscripten).

첫 단계 (순서대로, 구체)

  1. toau2c.c 생성 템플릿에서 불필요 #include <stdio.h> 제거 → freestanding 가능성 확인. 출력 함수 1곳 식별(runtime_stub).
  2. 출력 백엔드 추상화: 호스트=write(1) / ARM 베어메탈=세미호스팅(BKPT 0xAB 인라인asm) 또는 UART MMIO. runtime_stub에 rt_puts 1함수로 분리.
  3. 최소 startup + 링커: cortex-m3 _start(스택셋업→main) + 링커스크립트(FLASH/RAM). qemu -M mps2-an385 -cpu cortex-m3 -semihosting.
  4. 데모: 제곱(7)+제곱(3) → ARM ELF → qemu 실행 → 58 출력. 그 후 RISC-V(riscv64-elf-gcc) 동형.
  5. (별도) WASM: emscripten 설치 후 생성 C → wasm → node 실행.

함정

  • VM 아레나(48M)는 MCU엔 과대 — 베어메탈은 정적 축소(KB) 필요(임베디드 세션과 공유). VM견고성 세션의 가드 프레임회수로 누수는 해결됨([[feedback_crownyc_frame_reclaim_unsafe]]).
  • 프레임워크(-framework Security 등)는 호스트 SHA256용 — 베어메탈은 그 기능 빼거나 순수 구현.
  • 한선씨 우선: 출력 추상화/런타임은 .한선 동반.

성공 기준

한선씨 → toau2c C → arm-none-eabi-gcc(freestanding) → qemu-system-arm 실행 == 인터프리터 결과. (하드웨어 없이 검증 가능)