코드 변환과 저장된 보고서
리나 코드는 결정론적 파이프라인 기반의 코드 분석 플랫폼입니다. 30개 언어의 자기 코드를 이해하고, 개선하고, 변환하는 작업 공간입니다. Explain과 Review로 같은 언어의 코드를 설명하고 검토합니다. Convert로 코드를 원하는 언어로 변환합니다.
변환할 때는 입력 편집기에 코드를 넣고 사용 가능한 목표 언어를 고른 뒤 결과 편집기에서 코드를 검토하세요. 시작하기 전에 작업 공간에서 선택할 수 있는 언어를 확인하세요.
리나 코드의 기술 기반에는 자체 리스프 방언 리나와 코드의 구조를 표현하는 중간 형식 Facet IR이 있습니다. 코드 분석·변환 도구와 자체 인터프리터, 검증 코퍼스도 구축해 왔습니다. 이 자산을 바탕으로 코드 분석·생성·변환과 결정론적 결과 점검을 결합합니다.
아래 실습은 리스펙스와 함께 제공되는 TypeScript에서 Python으로 변환한 샘플 보고서를 검사합니다.
lena-gate-proof는 연결된 샘플 파일의 식별자입니다.
다른 변환을 확인할 때는 변환 도구에서 원본과 결과, 연결 파일, vouch.bridge-report/v0 보고서를 받으세요.
리스펙스 npm CLI와 Node.js를 준비하세요.
NPM_CLI에는 설치한 패키지의 bin/lispex.js 경로를 넣습니다.
이 문서는 변환 보고서를 받는 npm의 verify-bridge 명령을 사용합니다.
제공된 예제 준비하기
리스펙스 소스 체크아웃의 저장소 루트에서 시작하세요.
필요한 입력 파일 전체는 examples/vouch-bridge 아래에 있습니다.
| 해당 디렉터리 아래 파일 | 용도 |
|---|---|
source/checkout-discount.ts | TypeScript 소스 |
target/checkout_discount.py | Python 결과 파일 |
linked/lena-gate-proof.json | lena-gate-proof로 식별하는 연결 파일 |
reports/checkout-discount.bridge.json | vouch.bridge-report/v0 형식의 저장된 샘플 보고서 |
context/checkout-discount.context.json | 수신자가 기대하는 프로파일과 사례와 실행 방식 |
줄바꿈을 포함해 제공된 바이트를 그대로 쓰세요. 명령 결과는 예제 디렉터리 밖에 저장합니다. 이 실습은 저장된 샘플을 읽습니다. 엔진과 게이트 필드는 그 보고서에 적힌 선언입니다. 직접 변환할 때는 외부 엔진에서 소스와 결과 파일과 연결 파일과 보고서를 받으세요. 기대 문맥은 결과를 살펴보기 전에 독립적으로 고릅니다.
소스와 결과 파일은 고객 등급과 소계에 따라 할인율 15나 10이나 0을 구합니다.
기대 문맥은 checkout-discount-ts-to-python 사례와 checked-expression-route 실행 방식을 고릅니다.
vouch.conversion-evidence-profile/v0 프로파일과 함수·조건·비교·정수 연산 지원 목록도 지정합니다.
선택한 파일 검사하기
node "$NPM_CLI" verify-bridge \
--source examples/vouch-bridge/source/checkout-discount.ts \
--target examples/vouch-bridge/target/checkout_discount.py \
--linked lena-gate-proof=examples/vouch-bridge/linked/lena-gate-proof.json \
--expect-context examples/vouch-bridge/context/checkout-discount.context.json \
examples/vouch-bridge/reports/checkout-discount.bridge.json \
> bridge-verified.json명령은 종료값 0으로 끝나며 vouch.bridge-verify-report/v0 형식의 bridge-verified.json을 씁니다.
표준 오류에는 다음 메시지를 출력합니다.
bridge report is artifact-consistent출력의 checks와 summary 객체 전체는 다음과 같습니다.
{
"checks": {
"recomputed": [
"source",
"target",
"linked_artifact:lena-gate-proof"
],
"recorded_only": []
},
"summary": {
"status": "pass",
"exit_code": 0,
"failure_count": 0
}
}리스펙스는 제공한 세 파일을 읽고 해시를 보고서와 비교했습니다. 소스와 결과 파일의 길이, 보고서 구조, 선언된 게이트 결과, 기대 문맥도 검사했습니다. 수신자는 받아들일 엔진과 실행 방식과 증거를 결정합니다. 외부 엔진은 결과 파일을 만들고 선언한 검사를 실행합니다.
파일 옵션의 차이 확인하기
다음 명령으로 보고서만 따로 읽어 보세요.
node "$NPM_CLI" verify-bridge \
examples/vouch-bridge/reports/checkout-discount.bridge.json \
> bridge-record-only.json이 명령도 종료값 0이며 표준 오류에 bridge report is artifact-consistent를 출력합니다.
summary는 여전히 pass지만 checks는 다음과 같습니다.
{
"recomputed": [],
"recorded_only": [
"source",
"target"
]
}이 호출에서는 리스펙스가 기록된 구조와 선언을 검사했습니다.
recorded_only는 보고서에서 읽어 둔 소스와 결과 파일의 값을 나타냅니다.
실제 파일을 검사하려면 --source와 --target과 --linked를 쓰세요.
직접 고른 프로파일과 사례와 실행 방식을 검사하려면 --expect-context를 쓰세요.
보고서에 선언된 내용 읽기
| 보고서 필드 | 기록하는 내용 |
|---|---|
subject.source, subject.target | 언어와 경로와 바이트 길이와 해시 |
engine | 엔진 이름과 버전과 커밋 |
subject.route | 실행 방식과 프로파일과 지원 기능 |
checks | 선언된 pass, fail, not-run 결과와 연결 해시 |
linked_artifacts | 관련 파일의 식별자와 해시 |
boundary.attests, boundary.excludes | 보고서가 다루는 관측과 엔진이나 애플리케이션이 맡을 책임 |
--linked <id>=<file>은 선언된 연결 식별자에 해당하는 파일을 고릅니다.
--expect-context <file>은 vouch.bridge-context-manifest/v0을 읽습니다.
검사 명령은 보고서 요약이 선언된 검사 개수와 결과에 맞는지 확인합니다.
검사에 fail이나 not-run이 있으면 그 보고서의 요약은 fail이어야 합니다.
종료값 0은 제공한 입력의 검사를 통과했다는 뜻입니다.
종료값 1은 검사 실패나 선언된 실패 요약을 뜻합니다. summary와 diagnostics를 읽으세요.
종료값 2는 사용법 오류나 파일 읽기 오류나 JSON 파싱 오류입니다.
파일 종류에 맞춰 다음 명령 고르기
npm의 verify-bridge는 변환 보고서를 읽고 선택한 파일과의 결속을 검사합니다.
네이티브 verify-bridge는 다른 형식의 실행 보고서를 받습니다.
프로파일과 엔진과 소스와 입력도 옵션으로 명시합니다.
각 명령에 맞는 입력 형식을 쓰세요.
네이티브 차분 비교 보고서는 csk.differential-receipt/v0 형식입니다.
npm의 lispex verify가 이 보고서를 검사하며 npm의 vouch replay는 저장된 사례 모음을 비교합니다.
바우치 서명 인증과 새로운 네이티브 게이트에는 각각 묶음과 정책 입력이 필요합니다.
외부 행동은 호출 애플리케이션이 허가합니다.