미리 컴파일해 둔 제품 만들기

읽을 수 있는 토파즈를 생성한 뒤 정확히 설치한 토파즈 도구체인으로 컴파일합니다. 그 결과로 소스 없이 실행되는 네이티브 리스펙스 제품이 나옵니다.

여기서 AOT가 뜻하는 것

AOT는 ahead of time, 곧 미리 컴파일해 둔다는 뜻입니다. 네이티브는 실행하기 전에 규칙을 컴파일해서, 안에 리스펙스 소스가 들어 있지 않은 제품을 만듭니다. 네이티브 파이프라인은 다음처럼 명시적입니다.

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

생성 프로그램은 정적으로 펼친 제어 그래프를 직접 실행합니다. 리스펙스 소스와 바이트코드와 Rust 가상 머신과 소스 tree 인터프리터와 별도 토파즈 가상 머신은 각자 이름 붙은 빌드와 실행 경로를 유지합니다.

규칙 준비하기

refund-window.lspx를 만듭니다.

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

(decide input)

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

LISPEX
14

빌드 도구를 직접 지정하기

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

SH
lispex routes fetch \
  --route aot-compiler \
  --target aarch64-apple-darwin \
  --out /absolute/tools/lispex-aot-compiler

TOPAZ_BIN=/absolute/tools/lispex-aot-compiler/product/bin/topaz-bin
RUST_TOOL_BIN=/absolute/path/to/rustup/bin

가져오기는 정확히 닫힌 토파즈 패키지를 준비하고 릴리스 매니페스트를 검사합니다. 빌드는 사용자가 제공한 절대경로로 컴파일러를 선택하고 그 위치의 컴파일러와 npm 래퍼와 설치기와 Rust 도구 프록시를 검사합니다. 탐색 범위는 제공한 경로와 정확히 같습니다.

덮어쓰지 않고 빌드하기

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

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

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

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

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

실행하지 않고 검사하기

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

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

설치 제품 실행하기

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

OUTPUT

refund

run은 설치 제품을 다시 검증한 뒤 기록된 실행 파일을 시작합니다. 결과는 대체 실행 0회와 함께 명시적으로 선택한 AOT 경로에 남습니다.

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

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

결과는 제품 매니페스트, 소스, Core IR, 바이트코드, 생성 토파즈 묶음, 소스 맵, 토파즈 아티팩트, 실행 파일, 입력, 요청 자원, 관측값, 그리고 0으로 남은 대체 실행 계수 다섯 개를 함께 결속합니다.

자원 한도 지정하기

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

세 값은 모두 표기 형식이 하나로 정해진 부호 없는 64비트 십진수입니다. 앞자리 0, 부호, 범위 초과, 맞지 않는 자원 계산, 성공과 진단이 동시에 나타나는 불가능한 상태는 닫힌 실패가 됩니다. 엔진마다 자원 비용 모델이 다를 수 있으므로 같은 요청끼리 비교합니다. 같은 계수는 자원 관측의 일치를 기록하고 네 방식 영수증은 의미 일치를 별도 축에 기록합니다. 자원 한도에 도달하면 진단과 실제 계수값을 담은 타입이 지정된 fault 결과가 남습니다. 네이티브 부모는 컴파일한 프로세스의 종료 상태와 함께 그 JSON을 보존합니다.

네 가지 실행 방식 한 번에 비교하기

컴파일한 제품을 만든 뒤 한 소스와 입력을 Rust tree, 내장 Rust 가상 머신, 정확한 설치형 토파즈 가상 머신, 컴파일한 실행 파일에서 모두 실행할 수 있습니다.

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과 바이트코드를 하나씩 만듭니다. 미리 만든 컴파일 제품이 그 정확한 세 식별자를 결속하는지 증명합니다. 두 설치형 토파즈 제품을 검증한 뒤, 네 가지 방식을 재시도 없이 명시적으로 실행합니다.

덮어쓰지 않는 영수증은 의미 불일치 축과 비교 가능한 자원 불일치 축을 나눠 기록합니다. Rust 가상 머신과 토파즈 가상 머신과 컴파일한 제품은 같은 바이트코드 비용 모델을 쓰므로 전이 수, 출력, 제어 프레임, 완료한 루트가 일치해야 합니다. Tree는 자체 깊이 모델을 표시하고 해당하지 않는 전이 수와 프레임 수는 비워 둡니다. 종료 0은 네 가지가 모두 끝나고 검사한 축이 일치했다는 뜻입니다. 1은 불일치, 2는 실행이나 제품 실패, 3은 영수증 게시 실패입니다.

제품 역할

컴파일한 실행 파일, 제품 매니페스트, 소스 맵, 검사·검증·실행 보고서와 네 방식 영수증은 execution-material-only와 로컬 진단 근거를 제공합니다. 바우치는 게시자 인증과 수신자 신뢰 정책과 정확한 외부 소스와 입력과 요청 결속 현재 재실행과 로컬 게이트 결정을 tree 실행과 의미 기록과 Rust 가상 머신에 걸쳐 연결합니다.

Rust tree와 Rust 가상 머신은 각각 선택할 수 있는 복구 경로입니다. 각 경로는 자신의 결과와 경로 식별자를 유지합니다.

제품별 지원

제품빌드검사 / 검증 / 실행
macOS ARM64 네이티브정확히 설치한 토파즈 5.11만지원

현재 방식은 정확한 소스와 Core IR, 바이트코드, 컴파일러와 Rust와 macOS 최종화 도구 식별자를 하나의 네이티브 제품 계보로 기록합니다. 같은 호스트와 도구 식별자로 다시 만든 제품은 바이트 단위로 비교할 수 있습니다. 실행 성능과 바이너리 크기, 크로스 컴파일과 인터페이스 안정성은 토파즈 제품이 소유하고, 게시자 인증과 신뢰 정책과 로컬 승인 결정은 바우치 흐름이 맡습니다.

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

미리 컴파일해 둔 제품 만들기 · 리스펙스