네이티브 AOT 제품 만들기

읽을 수 있는 Topaz를 생성하고 정확히 설치한 Topaz 도구체인으로 컴파일해, 소스 없이 실행되는 네이티브 리스펙스 제품을 만듭니다.

여기서 AOT가 뜻하는 것

네이티브 파이프라인은 다음처럼 명시적입니다.

정확한 리스펙스 소스
  -> lispex.core-ir/v1
  -> lispex.bytecode/v1
  -> 읽을 수 있는 생성 Topaz + 소스 맵
  -> 정확히 설치한 Topaz 5.11 컴파일러
  -> topaz.artifact.v1
  -> 소스 없는 네이티브 제품

생성 프로그램에는 정적으로 펼친 제어 그래프가 들어갑니다. 실행할 때 리스펙스 소스나 바이트코드를 읽지 않으며 Rust VM, 트리 인터프리터, 별도 Topaz VM을 품고 있지도 않습니다.

규칙 준비하기

refund-window.lspx를 만듭니다.

LISPEX
(define (decide days)
  (if (<= days 30) 'refund 'review))

(decide input)

입력 datum은 request.lspx에 저장합니다.

LISPEX
14

빌드 도구를 직접 지정하기

AOT는 현재 macOS ARM64 네이티브 기능입니다. 설치한 topaz-lang@5.11.0 컴파일러와 Rust 도구 디렉터리를 절대경로로 지정합니다.

SH
TOPAZ_BIN=/absolute/path/to/node_modules/topaz-lang/bin/topaz-bin
RUST_TOOL_BIN=/absolute/path/to/rustup/bin

리스펙스는 Topaz 패키지·컴파일러·npm 래퍼·설치기와 Rust 도구 프록시의 정확한 바이트를 확인합니다. PATH, 저장소 checkout, 네트워크, 구버전 도구체인, 다른 캐시 제품을 찾아보지 않습니다.

덮어쓰지 않고 빌드하기

SH
lispex aot build \
  --source refund-window.lspx \
  --topaz-compiler "$TOPAZ_BIN" \
  --rust-tool-bin "$RUST_TOOL_BIN" \
  --out refund-window-aot

출력 디렉터리는 미리 존재하면 안 됩니다. 리스펙스는 제한된 비공개 staging에서 빌드하고 컴파일러가 낸 Topaz artifact와 모든 관리 파일을 먼저 엄격히 검사합니다. 이어 경로에 따라 달라지는 로컬 링커 심볼을 제거하고, 링커 서명을 고정된 리스펙스 AOT 임시 서명으로 바꿉니다. 제품 manifest에는 정확한 /usr/bin/strip·/usr/bin/codesign 해시가 기록되고, 최종 Topaz artifact는 이 최종 실행 파일에 다시 결속됩니다. 리스펙스는 자기 manifest를 마지막에 쓰고 폐쇄된 제품을 원자적으로 게시합니다.

설치 디렉터리에는 다음 파일만 있습니다.

lispex-aot-product.json
lispex-source-map.json
topaz-artifact.json
target/debug/program
LICENSE
NOTICE
GENERATED-OUTPUT-NOTICE.txt

실행할 때 생성 Topaz와 원본 리스펙스 소스는 필요하지 않습니다.

실행하지 않고 검사하기

SH
lispex aot inspect --product "$PWD/refund-window-aot"
lispex aot validate --product "$PWD/refund-window-aot"

두 명령 모두 제품 루트의 절대경로를 요구합니다. 폐쇄된 파일 목록, 소스/Core IR/바이트코드/AOT 식별자, 소스 맵, 정확한 컴파일러와 macOS 최종화 계보, Topaz artifact, 실행 파일 해시, 타깃, 폴백 0을 확인합니다. 실행 파일은 시작하지 않습니다.

설치 제품 실행하기

SH
lispex aot run \
  --product "$PWD/refund-window-aot" \
  --input request.lspx

OUTPUT

refund

run은 설치 제품을 다시 검증한 뒤 기록된 실행 파일만 시작합니다. 컴파일하지 않으며 트리 인터프리터, Rust VM, Topaz VM, 바이트코드 파서, 네트워크, 다른 설치 제품을 재시도하지 않습니다.

기계가 읽는 결과가 필요하면 --json을 붙입니다.

SH
lispex aot run \
  --product "$PWD/refund-window-aot" \
  --input request.lspx \
  --json

결과는 제품 manifest, 소스, Core IR, 바이트코드, 생성 Topaz 묶음, 소스 맵, Topaz artifact, 실행 파일, 입력, 요청 자원, 관측값, 다섯 개의 폴백 0을 함께 결속합니다.

자원 한도 지정하기

SH
lispex aot run \
  --product "$PWD/refund-window-aot" \
  --input request.lspx \
  --machine-transitions 1000000 \
  --output-bytes 1048576 \
  --control-frames 10000 \
  --json

세 값은 모두 정규 unsigned 64-bit 십진수입니다. 앞자리 0, 부호, 범위 초과, 맞지 않는 자원 계산, 성공과 진단이 동시에 나타나는 불가능한 상태는 닫힌 실패가 됩니다. 엔진마다 자원 비용 모델은 다를 수 있으므로 같은 요청끼리 비교해야 하며, 숫자가 같다고 의미 동등성이 증명되지는 않습니다. 자원 한도에 도달하면 진단과 실제 계수값을 담은 typed fault 결과가 남습니다. AOT 프로세스가 실패 코드로 끝났다는 이유로 Native 부모가 그 JSON을 버리지 않습니다.

네 네이티브 경로 한 번에 비교하기

AOT 제품을 만든 뒤 한 소스와 입력을 Rust tree, 내장 Rust VM, 정확한 설치형 Topaz VM, AOT 실행 파일에서 모두 실행할 수 있습니다.

SH
lispex compare-routes \
  --topaz-vm /absolute/path/to/aarch64-apple-darwin \
  --aot-product "$PWD/refund-window-aot" \
  --receipt four-routes.json \
  --input request.lspx \
  refund-window.lspx

리스펙스는 소스를 한 번만 읽고 정규화해 Core IR과 바이트코드를 하나씩 만듭니다. 미리 만든 AOT 제품이 그 정확한 세 식별자를 결속하는지 증명하고 두 설치형 Topaz 제품을 검증한 뒤, 네 경로를 재시도 없이 명시적으로 실행합니다.

덮어쓰지 않는 영수증은 의미 불일치 축과 비교 가능한 자원 불일치 축을 나눠 기록합니다. Rust VM·Topaz VM·AOT는 같은 바이트코드 비용 모델의 transition·출력·제어 프레임·완료 root가 일치해야 합니다. Tree는 다른 깊이 모델을 그대로 표시하며 존재하지 않는 transition·frame 수를 꾸며내지 않습니다. 종료 0은 모든 경로 완료와 검사 축 일치, 1은 불일치, 2는 실행·제품 실패, 3은 영수증 게시 실패입니다.

보안 경계

AOT 실행 파일, 제품 manifest, 소스 맵, 검사·검증·실행 보고서와 네 경로 영수증은 execution-material-only 또는 로컬 진단 근거입니다. 어느 것도 Vouch 인증 evidence, 요청 결속 재실행 결과, gate grant가 아닙니다. 현재 Vouch 체인은 계속 정확한 외부 소스와 입력, tree/Meaning/Rust VM 경계를 사용합니다.

Rust tree와 Rust VM은 독립적으로 선택할 수 있는 복구 경로로 남습니다. AOT 실패는 그대로 드러나며 다른 경로를 자동 선택하지 않습니다.

제품별 지원

제품빌드검사 / 검증 / 실행
macOS ARM64 네이티브정확히 설치한 Topaz 5.11만지원
다른 네이티브 타깃미지원미지원
npm CLI/패키지Native-only라고 명시적으로 거부미지원
공개 WASM, 브라우저, Worker, 플레이그라운드미지원미지원

현재 경로는 정확성을 우선한 비최적화 AOT 제품입니다. 바이트 동일 재빌드 주장은 현재 호스트에서 기록된 컴파일러·Rust·macOS 최종화 도구 식별자에만 한정되며, 호스트 간 재현 가능 빌드를 뜻하지 않습니다. 더 작은 바이너리, 더 빠른 실행, 크로스 컴파일, 안정 ABI, 형식적 동등성, 게시자 진위, Vouch 권한을 보장하지 않습니다.

검증된 바이트코드 실행하기 · 네이티브 CLI · 런타임과 백엔드