네이티브 코드젠 착수 평가 (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-gcc16.1.0 ·riscv64-elf-gcc·qemu-system-arm(실행 가능).
정밀 갭 (좁음)
- arm-none-eabi-gcc = 컴파일러만 (newlib/libc.a/crt0/rdimon.specs 없음) → 베어메탈 freestanding 필요.
- 생성 C·runtime_stub은 printf/fprintf/puts/fopen 0개 사용 — 불필요한
#include <stdio.h>만 있음. 출력은 비-stdio 경로(write/syscall 추정). - WASM: emcc·clang wasm32 타깃 미설치 (별도:
brew install emscripten).
첫 단계 (순서대로, 구체)
- toau2c.c 생성 템플릿에서 불필요
#include <stdio.h>제거 → freestanding 가능성 확인. 출력 함수 1곳 식별(runtime_stub). - 출력 백엔드 추상화: 호스트=write(1) / ARM 베어메탈=세미호스팅(BKPT 0xAB 인라인asm) 또는 UART MMIO. runtime_stub에
rt_puts1함수로 분리. - 최소 startup + 링커: cortex-m3
_start(스택셋업→main) + 링커스크립트(FLASH/RAM). qemu-M mps2-an385 -cpu cortex-m3 -semihosting. - 데모: 제곱(7)+제곱(3) → ARM ELF → qemu 실행 → 58 출력. 그 후 RISC-V(riscv64-elf-gcc) 동형.
- (별도) WASM: emscripten 설치 후 생성 C → wasm → node 실행.
함정
- VM 아레나(48M)는 MCU엔 과대 — 베어메탈은 정적 축소(KB) 필요(임베디드 세션과 공유). VM견고성 세션의 가드 프레임회수로 누수는 해결됨([[feedback_crownyc_frame_reclaim_unsafe]]).
- 프레임워크(-framework Security 등)는 호스트 SHA256용 — 베어메탈은 그 기능 빼거나 순수 구현.
- 한선씨 우선: 출력 추상화/런타임은 .한선 동반.