이 참조에서 평가기를 고르고 결과 파일을 해석하는 규칙을 찾을 수 있습니다. 네이티브 임베딩에 쓰는 정확한 식별자와 자원 필드, 실행 수명 주기를 정리합니다. 두 평가기는 작업량과 메모리를 세어 한도에서 멈추므로 자원 제어 평가기라고 부릅니다.
결과부터 읽기
전체 임베딩 예제는 정수 입력 14로 결정 규칙을 실행합니다.
검사한 JSON에는 다음 필드가 들어 있습니다.
{
"category": "semantic-complete",
"code": "complete",
"semantic_profile_id": "lispex/r7rs-rule-embedded-core/1"
}같은 준비 규칙에 eval_work를 0으로 지정하면 category는 semantic-exhausted가 됩니다.
code는 eval_work입니다. 결과 파일에는 자원 종료가 기록됩니다.
CLI는 어느 결과든 파일을 정상 저장하면 종료 코드 0을 냅니다.
| 평가 결과 | 결정 평가기의 category | 전체 평가기의 category |
|---|---|---|
| 완료 | semantic-complete | complete |
| 실행 중 오류 | semantic-fault | semantic-fault |
| 자원 종료 | semantic-exhausted | exhausted |
| 요청 거부 | request-refusal | request-refusal |
| 엔진 결함 | engine-fault | engine-fault |
두 평가기 중 하나 고르기
결정 평가기는 배포 묶음에 적힌 연산을 받습니다.
전체 평가기는 내장 프로시저 205개를 제공하며 등록부에서 Deferred로 남은 항목은 없습니다.
네이티브에서 embed full을 명시해 선택합니다.
| 항목 | 결정 평가기 | 전체 평가기 |
|---|---|---|
| 명령 시작 | lispex embed | lispex embed full |
| 언어 프로파일 | lispex/r7rs-rule-embedded-core/1 | lispex/r7rs-rule-current-profile-bounded/1 |
| 작업량과 할당량 모델 | lispex-vm-meter/1 | lispex-full-vm-meter/1 |
| 파일 머리 바이트 | LPXART01 | LPXFAR01 |
| 초기 WASM 메모리 페이지 | 18 | 19 |
| 최대 WASM 메모리 페이지 | 256 | 256 |
전체 평가기 구성요소 식별자는 lispex-evaluator/rust-vm-current-profile/1입니다.
배포 목록 파일은 구성 파일과 정보를 나열하며 정확한 WASM SHA-256으로 평가기를 식별합니다.
같은 해시값이 릴리스 압축 파일과 애플리케이션에서 같은 바이트를 가리킵니다.
두 평가기는 다음 v1 형식을 함께 씁니다.
| 형식 | 식별자 |
|---|---|
| 값을 바이너리로 표현하는 값 코덱 | lispex.embed-value/v1 |
| 평가 이벤트를 순서대로 담는 이벤트 기록 | lispex.embed-transcript/v1 |
| WASM 바이너리 호출 규약 | lispex.embed-wasm-abi/v1 |
| 한 번의 실행을 묶은 이식 가능한 핵심 기록 | lispex.embed-receipt-core/v1 |
준비 한도와 평가 한도 나누기
CLI 한도 파일은 두 단계 모두 logical_allocation을 씁니다.
바이너리 요청에서는 prepare_logical_allocation과 eval_logical_allocation으로 구분합니다.
| 준비 요청 필드 | 자원 |
|---|---|
raw_source_bytes | 제출한 소스 바이트 |
prepare_work | 준비 작업량 단위 |
prepare_logical_allocation | 준비 할당량 단위 |
syntax_depth | 구문 중첩 깊이 |
| 평가 요청 필드 | 자원 |
|---|---|
canonical_input_bytes | 정해진 값 인코딩으로 표현한 입력 바이트 |
eval_work | 평가 작업량 단위 |
eval_logical_allocation | 평가 할당량 단위 |
semantic_frames | 활성 의미 연속 프레임 수 |
traversal_depth | 값 순회 깊이 |
output_bytes | 프로그램 출력 바이트 |
diagnostic_bytes | 진단 바이트 |
transcript_bytes | 인코딩한 이벤트 바이트 |
transcript_events | 기록한 이벤트 수 |
result_bytes | 인코딩한 결과 바이트 |
연속 프레임은 호출 뒤에 할 일을 저장합니다. 올바른 꼬리 호출은 현재 의미 연속을 다시 사용합니다.
각 자원 모델은 작업 비용과 논리 할당 단위를 정합니다. 평가기는 효과를 내기 전에 비용을 부과합니다. 부호 없는 64비트 정수의 전체 범위를 사용하며 처음으로 한도를 넘길 예약에서 멈춥니다. 반복 실행 조건은 결정성 문서를 참고하세요.
WASM 인터페이스 호출하기
각 모듈은 외부에서 가져오는 함수 없이 메모리 하나를 사용합니다. 할당, 해제, 인터페이스 버전, 준비, 평가 함수를 제공합니다. 메모리 경계를 나타내는 표준 전역값도 제공합니다. 요청의 필드 길이와 부호 없는 정수는 큰 자릿수 바이트부터 쓰는 big-endian 순서로 인코딩합니다. 호출자가 자원 한도를 전달합니다.
준비나 평가를 시작할 때마다 새 Wasmtime Store와 Instance를 만듭니다. 메모리, 할당기, 프로그램 힙, 심볼 저장소, 변경 가능한 셀, 연속도 새로 만듭니다. 작업량 계수기와 이벤트 기록과 결과 버퍼도 해당 작업에서만 씁니다. 애플리케이션은 정확히 같은 WASM 식별자의 불변 컴파일 모듈을 공유할 수 있습니다.
실행 식별자와 결과 보존하기
이식 가능한 핵심 기록은 제출 소스, 정규 소스, 의미 규칙, 정규 입력을 묶습니다.
자원 한도, 요청, 평가기 파일, 평가, 이벤트 기록, 결과도 함께 연결합니다.
정규 형식은 하나로 정해진 바이트 표현을 뜻합니다.
lispex.evaluation-identity/v1은 길이를 붙인 필드를 SHA-256으로 해시합니다.
| 종료 분류 | 저장 정보 |
|---|---|
| 결정적 의미 결과 | 결과와 이벤트 기록과 이식 가능한 핵심 기록 |
| 결정적 요청 거부 | 거부와 이벤트 기록과 이식 가능한 핵심 기록 |
| 운영 중단 | 엔진 종료 상태 |
| 엔진 결함 | 엔진 종료 상태와 진단 |
발급자는 결정 교환과 리스펙스 바우치 흐름에서 완성된 핵심 기록 바이트에 서명할 수 있습니다. 서명과 애플리케이션의 행동 허가는 별도 단계입니다.
네이티브 결정 디렉터리 사용하기
결정 규칙 가이드에
rule run, rule inspect, rule verify, rule replay의 완전한 실습이 있습니다.
rule run은 소스와 엄격한 JSON 입력 파일, 별도의 준비 한도와 평가 한도를 받습니다.
| JSON 입력 | 리스펙스 값 |
|---|---|
| 객체 | 레코드 |
| 배열 | 벡터 |
| 문자열, 불리언, 정확한 정수 | 해당 값 종류 |
null | 빈 리스트 |
완료된 실행은 새 출력 디렉터리에 파일 다섯 개를 만듭니다.
| 파일 | 내용 |
|---|---|
prepared.lpxembed | 준비한 규칙 |
canonical-input.lpxvalue | 정해진 바이너리 인코딩의 입력 |
result.lpxembed | 결과와 그 요청의 연결 |
receipt-core.lpxreceipt | 이식 가능한 핵심 기록 |
summary.json | 해당 파일을 읽기 쉬운 JSON으로 요약한 내용 |
rule inspect는 디렉터리를 요약합니다.
rule verify는 구성 파일 목록과 바이트 연결을 확인합니다.
rule replay는 기록한 요청을 새 인스턴스에서 평가하고 결과와 이식 가능한 핵심 기록을 확인합니다.
애플리케이션이 맡을 일 정하기
네이티브에는 평가기의 정확한 바이트가 들어 있습니다. 릴리스는 WASM 묶음, 배포 목록, 시험 입력과 기대값, 확인 자료, 소프트웨어 자재 명세도 제공합니다. 의존성 처리 결정과 안전성 근거, 기존 기록에 새 기록만 더하는 릴리스 관계 그래프도 제공합니다. 보존한 평가기 바이트로 과거 기록을 계속 읽을 수 있습니다.
호출 애플리케이션은 소스를 보관하고 네트워크 접근과 업무 정책을 관리합니다. 유효 시점, 중복 사용 방지, 외부 행동도 애플리케이션이 맡습니다. 결정 교환은 발급자의 서명된 기록을 전달하고 수신자 정책을 적용합니다. 리스펙스 바우치는 서명된 근거를 인증하고 로컬에서 행동 허용 여부를 판정합니다. 토파즈 구성요소는 자체 컴파일러 식별자와 수용 검사 식별자를 유지합니다.