명령행에서 리스펙스 규칙 하나를 실행하고 결과나 자원 한도 보고서를 읽어 보세요. 애플리케이션에서 규칙을 반복 호출하려면 리스펙스 규칙 실행하기를 따라 하세요.
먼저 토파즈를 설치하세요. 내장 평가기는 리스펙스 1.20.0을 사용합니다. 규칙을 평가하는 동안 파일·네트워크·시스템 시계에 접근할 수 없습니다.
파일 세 개 준비하기
작업 폴더를 만들고 그 안에 rule.lspx를 저장하세요.
(if (< 10 15) "allow" "deny")리스펙스는 판단 규칙을 위한 리스프로, Scheme과 비슷한 문법을 사용합니다. 이 규칙은 두 상수를 비교하고 "allow"를 반환합니다. 입력값은 사용하지 않습니다. 언어 설명은 리스펙스를 참고하세요.
같은 폴더에서 아래 명령 중 하나로 value.lpxvalue를 만드세요. 첫 명령은 Bash 호환 셸에서, 두 번째 명령은 PowerShell에서 실행합니다.
printf '\000' > value.lpxvaluePowerShell
[IO.File]::WriteAllBytes((Join-Path (Get-Location) 'value.lpxvalue'), [byte[]]@(0))파일에는 00 바이트 하나가 들어갑니다. 공통 값 형식인 lispex.embed-value/v1에서 빈 값 nil을 나타냅니다. 이 파일은 바이너리입니다. 텍스트 편집기에 00이라는 글자를 입력하면 다른 입력이 됩니다.
아래 파일 전체를 limits.json으로 저장하세요.
{
"schema": "topaz.lispex-embed-limits/v1",
"prepare": {
"raw_source_bytes": 4096,
"prepare_work": 1000000,
"logical_allocation": 1000000,
"syntax_depth": 64
},
"evaluate": {
"canonical_input_bytes": 4096,
"eval_work": 10000,
"logical_allocation": 1000000,
"semantic_frames": 1000,
"traversal_depth": 256,
"output_bytes": 4096,
"diagnostic_bytes": 4096,
"transcript_bytes": 4096,
"transcript_events": 100,
"result_bytes": 4096
}
}모든 필드를 유지하세요. 값을 낮출 수는 있지만 필드를 추가하거나 빼면 잘못된 한도 문서가 됩니다. eval_work는 평가기의 작업량을 셉니다. 규칙별 한도와 애플리케이션 쿼터는 리스펙스 규칙 실행하기에서 설명합니다.
실행하고 결과 읽기
파일 세 개가 있는 폴더에서 다음 명령을 실행하세요. 출력 폴더 lispex-result는 아직 없어야 합니다.
topaz lispex embed run --source rule.lspx --input value.lpxvalue --limits limits.json --output lispex-result명령은 표준 출력 없이 종료 코드 0으로 끝납니다. lispex-result/report.json과 lispex-result/result.lpxvalue를 만듭니다. 보고서를 열고 outcome 객체를 찾으세요.
{ "category": "complete", "code": "complete", "operation": "evaluate" }result.lpxvalue는 바이너리 결과입니다. 보고서는 규칙·입력·한도·평가기·런타임·자원 사용량도 기록합니다.
작업량 한도 결과를 보려면 limits.json을 small-limits.json으로 복사하세요. evaluate.eval_work를 10000에서 1로 바꾸고 다른 필드는 유지합니다. 새 출력 폴더를 지정하세요.
topaz lispex embed run --source rule.lspx --input value.lpxvalue --limits small-limits.json --output lispex-limit이 명령도 표준 출력 없이 종료 코드 0으로 끝납니다. lispex-limit/report.json의 outcome은 다음과 같습니다.
{ "category": "limit-exhaustion", "code": "eval_work", "operation": "evaluate" }규칙이 끝나지 않았으므로 result.lpxvalue는 없습니다. 평가를 끝내려면 eval_work를 10000으로 복구하고 사용하지 않은 출력 폴더를 지정하세요. CLI의 종료 코드는 평가 보고서를 기록했다는 뜻입니다. 완료·규칙 실패·자원 한도는 outcome.category로 구분합니다.
| 결과 | 생성 파일 |
|---|---|
| 평가 완료 | report.json과 result.lpxvalue |
| 결정론적 규칙 실패 또는 자원 한도 | report.json |
| 요청 거부 또는 엔진 실패 | 출력 폴더 없음 |
설치된 평가기 확인하기
topaz lispex embed info --json명령은 JSON을 출력하고 종료 코드 0으로 끝납니다. 다음 필드에서 단독 CLI가 쓰는 구성 요소와 값 형식을 확인할 수 있습니다.
| 필드 | 값 |
|---|---|
component.id | lispex-embed-evaluator/1.20.0 |
semantic.profileId | lispex/r7rs-rule-embedded-core/1 |
semantic.valueCodecId | lispex.embed-value/v1 |
프로필은 지원 기능과 실행 규칙을 정한 이름입니다. 명령은 설치된 구성 요소와 프로필을 사용합니다. 다른 구성 요소를 탐색·다운로드하거나 호스트 콜백을 호출하지 않습니다. 실패해도 다른 평가기로 전환하지 않습니다.
애플리케이션에서 규칙 호출하기
패키지에서는 std.lispex와 std.lispex.rules에 생성된 규칙 함수를 사용하세요. 리스펙스 규칙 실행하기에 모든 파일과 정상·작업량 한도 출력이 있습니다.
애플리케이션 프로필은 lispex/r7rs-rule-current-profile-bounded/1입니다. 평가할 때마다 메모리·전역 변수·자원 계량기·실행 기록을 새로 만듭니다. 애플리케이션은 쿼터·시간 한도·취소·정리도 처리합니다.
결과에는 evaluate를, 저장할 수 있는 기록도 필요하면 evaluateWithEvidence를 사용하세요. 가이드는 저장·검사·검증·리스펙스 형식 코어 추출과 freshReplay를 설명합니다.
이 기록은 서명되지 않은 미인증 데이터입니다. 발행자, 공급자 승인, 서명 권한, 구성 요소 승인, 외부 작업 권한을 포함하지 않습니다. 로컬 거부·취소·대기열 거부·안전을 위한 중단·엔진 실패에는 이식 가능 코어가 생성되지 않습니다.
애플리케이션은 인터프리터와 네이티브 릴리스 대상 다섯 곳의 제품에서 실행됩니다. 빌드한 네이티브 실행 파일은 위치를 옮기고 프로젝트 소스와 컴파일러를 제거한 뒤에도 실행할 수 있습니다. Web·no-capability·빈 구성 요소 MCP 경로는 실행이나 출력 생성을 거부합니다. 기존 토파즈 5.18 패키지는 별도의 embedded-core 호환 프로필과 준비된 규칙 식별자를 유지합니다. 거부된 경로는 다른 프로필이나 실행 환경으로 전환하지 않습니다.
LIT 테스트 이해하기
LIT는 Lispex-in-Topaz의 약자입니다. 토파즈로 작성한 인터프리터이며 툴체인 테스트에 사용합니다. 테스트는 같은 소스를 직접 실행하고, 생성된 Rust와 Web에서도 실행합니다.
테스트 기록에는 소스·경로·입력·관찰 결과를 남깁니다. 이를 통해 검사·코드 생성·런타임 동작·호출 프로그램과의 연동에서 오류를 찾습니다. 지원하지 않는 연산은 명확한 오류를 반환합니다.
LIT는 저장소의 테스트 시스템에 속하며 설치 패키지에는 포함되지 않습니다. --target lispex와 --target lit는 출력 파일을 쓰기 전에 거부됩니다. 규칙을 평가하려면 위의 CLI 명령이나 애플리케이션 API를 사용하세요.