중간 형식 참조

Core IR 보고서 필드, 인코딩 규칙, 고정 식별자, 자원 한도와 명령 종료값을 설명합니다.

완전한 소스 파일과 실행 명령은 중간 형식으로 규칙 컴파일하기에서 확인하세요.

검사 결과 읽기

가이드의 환불 예제에서는 다음 검사 필드가 나옵니다. 아래 JSON은 보고서의 일부입니다.

JSON
{
  "requirements": ["explicit-input"],
  "roots": [
    {
      "column": 1,
      "index": 0,
      "line": 1,
      "normalized_core": "(define decide (lambda (days) (if (<= days (quote 30)) (quote refund) (quote review))))"
    },
    {"column": 1, "index": 1, "line": 4, "normalized_core": "(decide input)"}
  ]
}

루트는 최상위 표현식입니다. 첫 루트는 decide를 정의하고 둘째 루트는 외부 값 input으로 호출합니다. normalized_core는 축약 문법을 핵심 형식으로 바꾼 결과입니다. line과 column은 1부터 세는 소스의 행과 열입니다.

보고서 필드뜻
artifact.source_sha256정확한 소스 바이트의 식별자
artifact.core_ir_sha256Core IR 파일 전체의 식별자
artifact.counts루트와 노드, 바인딩과 함수, 전역 변수와 요구사항 개수
globals전역 셀 ID와 이름, 초깃값인 내장 프로시저 ID
requirements프로그램에 전달할 명시적 입력
roots읽을 수 있는 정규화 표현식과 소스 위치
execution: "not-run"이 명령에서 규칙을 실행하지 않은 상태
authority: "integrity-only"이 보고서가 파일 무결성을 다룬다는 표시

셀은 변수의 값을 저장하는 위치입니다. 바인딩은 변수와 셀을 연결합니다. 컴파일러는 .lpxir 파일을 읽으며 검사 보고서는 검토에 필요한 정보를 보여 줍니다.

고정 식별자

항목식별자
파일 스키마lispex.core-ir/v1
언어 프로파일lispex-profile-1.5
내장 프로시저 목록lispex.primitive-registry/v1
비용 모델lispex.core-ir-cost/v1
생성 도구 계열lispex-rust-core-ir/v1
파일 해시 도메인lispex/core-ir-hash/v1
목록 해시 도메인lispex/primitive-registry-hash/v1

내장 프로시저 목록은 실행 가능한 이름 205개에 고정 숫자 ID를 부여합니다. 정규화기는 사용자 이름을 잘못 가로채지 않도록 축약 문법을 바꿉니다. 내부 연산은 내장 프로시저 ID를 직접 가리킵니다. 소스에 보이는 내장 프로시저는 그 ID로 초기화한 변경 가능한 전역 셀을 사용합니다. 따라서 지역 변수로 이름을 가리거나 최상위에서 재정의해도 언어의 동작을 유지합니다.

파일에 기록하는 정보

컴파일러는 정확한 소스를 읽고 축약 문법을 Core 형식으로 바꿉니다. 이어서 바인딩과 클로저의 참조를 정하고 Core IR을 인코딩합니다.

기록하는 정보용도
지역 셀과 전역 셀 ID둘러싼 범위나 전역 저장 위치에 따라 변수 식별
고정 매개변수와 나머지 매개변수, let, letrec, 내부 정의바인딩을 만드는 위치 기록
정의를 연결하는 전달 셀실행 중 활성화한 정의를 기존 참조에서 사용
클로저 캡처함수가 사용하는 변경 가능한 바깥 셀 공유. 중첩 함수에 필요한 셀도 포함
일반 호출과 꼬리 호출Core IR에서 이미 정한 호출 위치 보존
값 0개와 1개와 여러 개를 받는 문맥각 문맥이 받는 값의 수 기록
guard, 예외, 연속, dynamic-wind제어 구조 기록
리터럴 데이터와 소스 위치상수 값과 그 위치 보존
명시적 입력 요구사항호출자가 전달할 외부 값 표시
내장 프로시저 목록과 비용 모델 ID내장 프로시저와 자원 규칙 식별

읽기용 표현은 Core IR로 바꾸기 전의 정규화된 Core를 재구성합니다. 다른 런타임 구현은 자체 구현 식별자와 실행 결과를 기록합니다.

인코딩과 엄격한 읽기

정규 인코딩은 파일에 기록한 모든 정보의 바이트 표현을 하나로 정한다는 뜻입니다. 이 정보에는 소스 식별자와 소스 위치도 포함됩니다. 따라서 같은 값을 반환하는 두 프로그램도 Core IR 바이트는 다를 수 있습니다.

인코딩은 필드 순서가 고정된 UTF-8 JSON이며 태그 배열을 사용합니다. 음이 아닌 정수는 최소 길이의 십진수로 씁니다. 유니코드 문자열을 정확히 보존하며 마지막에는 LF 하나를 둡니다. 전역 변수와 요구사항, 캡처와 바인딩과 함수에는 정해진 순서와 ID 연속성 규칙이 적용됩니다.

읽기 도구는 중복되거나 빠진 필드, 예상 밖 필드, 순서가 바뀐 필드를 거부합니다. 다른 숫자나 데이터 표기, 알 수 없는 태그나 ID, 끊어진 참조, 잘못된 캡처와 꼬리 위치도 거부합니다. 소스 위치는 유효해야 합니다. 끝에 바이트가 더 있거나 다시 인코딩한 결과가 원본과 달라도 거부합니다.

한도와 파일 식별자

테이블을 읽거나 메모리를 할당하기 전에 한도를 확인합니다.

항목최대
입력 소스4 MiB
Core IR 파일16 MiB
표현식 노드100,000
바인딩100,000
함수100,000
전역 변수100,000
구조 깊이1,024

source_sha256은 기존 소스 해시 도메인으로 정확한 소스 바이트를 식별합니다. core_ir_sha256은 별도 해시 도메인으로 정규 파일 전체를 식별합니다. 해시 도메인은 해시를 구할 데이터의 종류를 구분하는 고정 접두어입니다. 파일을 읽는 쪽에서는 보고서의 필드를 그대로 사용합니다.

명령과 종료값

네이티브에서 다음 명령을 제공합니다.

명령성공 결과
저장 경로를 지정한 core-ir build파일과 lispex.core-ir-build/v1 보고서
core-ir build --out -stdout에 Core IR 바이트만 출력
core-ir inspectlispex.core-ir-inspection/v1 보고서
core-ir validatevalid: true를 담은 lispex.core-ir-validation/v1 보고서
종료값뜻
0명령 완료
1소스나 검증 오류
2사용법 오류
3선언된 자원 한도 도달, 입출력 실패, 파일 게시 실패

npm과 공개 WASM과 플레이그라운드는 기준 런타임으로 소스를 실행합니다. 제품 차이는 리스펙스 인터프리터와 리스펙스 VM에서 확인하세요.

Meaning Graph와 리스펙스 바우치

Core IR은 정규화된 언어 프로파일의 셀 참조와 캡처와 꼬리 위치를 기록합니다. 네이티브는 식별자를 유지하며 이 정보를 Meaning Graph v1으로 옮깁니다.

명령형식과 동작
버전 옵션 없는 lower이름 기반 csk.meaning-graph/v0
diff-receipt기존 v0 비교 보고서
lower --graph-version v1검증한 Core IR에서 참조를 정한 csk.meaning-graph/v1 생성
eval-graph그래프 태그로 v0나 v1 선택
meaning-diffcsk.meaning-differential-report/v1

리스펙스 바우치는 컴파일 흐름에서 인증한 정확한 소스로 Core IR을 다시 만듭니다. 발급자 인증은 서명자를 식별하고 수신자 정책은 신뢰 여부를 정합니다. 소스와 입력 연결은 요청을 식별합니다. 재실행은 현재 결과를 제공하고 바우치 게이트는 로컬 결정을 기록합니다. 별도 컴파일 묶음은 바이트코드 참조에서 설명합니다.