리스펙스 인터프리터와 VM

리스펙스 구현을 비교해 결과와 출력과 진단의 차이를 살펴보세요. 구현 표에서 프로그램에 필요한 비교 방식을 고릅니다. 실행 방식마다 다른 이 구현들을 런타임 구현이라고 부릅니다.

네이티브에는 리스펙스 인터프리터와 리스펙스 VM이 들어 있습니다. 일반 규칙 실행은 애플리케이션에서 리스펙스 실행하기에서 시작하세요.

비교 방식 고르기

할 일입력필요한 제품
compare-engines로 tree와 바이트코드 비교소스네이티브

비교 참조에서 보고서를 고르고 결과를 읽는 방법을 확인하세요. 바이트코드 저장과 실행은 바이트코드와 배포에서 다룹니다.

같은 소스를 두 엔진으로 실행하기

다음 전체 프로그램을 answer.lspx로 저장합니다.

LISPEX
(+ 20 22)

기본 리스펙스 인터프리터로 실행합니다.

SH
lispex answer.lspx

출력

출력
42

이번에는 리스펙스 VM을 선택합니다. VM은 바이트코드라는 미리 준비한 명령을 실행하는 프로그램입니다.

SH
lispex run --backend rust --engine vm answer.lspx

출력

출력
42

두 명령 모두 종료 상태는 0이고 파일을 만들지 않습니다. VM 명령에서는 네이티브가 바이트코드를 만들고 검사한 뒤 실행합니다. 기본 엔진 tree는 리스펙스 인터프리터입니다. 소스를 읽고 축약 형식을 핵심 형식인 CoreExpr로 정규화한 뒤 그 형식을 평가합니다.

소스 실행과 퇴역한 구현

리스펙스 인터프리터는 네이티브와 npm과 WASM과 플레이그라운드에서 소스를 실행합니다. 네이티브에는 검증 바이트코드를 실행하는 리스펙스 VM도 들어 있습니다.

두 엔진은 모두 Rust로 구현했습니다. 이전 문서의 Rust tree 인터프리터와 Rust VM이 각각 이 엔진입니다. CLI 식별자는 --backend rust와 --engine tree|vm을 유지합니다.

LIL과 LIT 퇴역

LIL과 LIT는 내부 교차검증 역할을 완수했습니다. 앞으로의 유지보수 비용을 줄이기 위해 리스펙스 1.21에서 퇴역했습니다. 현재 프로그램 실행과 애플리케이션 연결에는 리스펙스 인터프리터와 리스펙스 VM, 별도 제품인 결정 평가기와 전체 평가기를 사용합니다.

옛 토파즈 VM과 AOT 공개 동반제품은 이전 버전의 자료로 남습니다. 토파즈 VM은 리스펙스 바이트코드를 실행하는 별도 실행기였습니다. AOT는 리스펙스를 토파즈로 변환해 네이티브 프로그램으로 컴파일했습니다. 현행 내장 실행기인 리스펙스 VM의 식별자는 lispex-rust-vm/v1이며 옛 토파즈 VM은 lispex-topaz-vm/v1을 썼습니다. 내부 리스펙스 VM은 검증 바이트코드를 실행하며 임베딩 평가기의 기반으로 계속 사용합니다.

LIL은 리스펙스로 작성한 별도 인터프리터였습니다. Rust 인터프리터 위에서 자체 리더와 정규화와 평가를 실행했습니다. LIT는 토파즈로 작성한 리스펙스 인터프리터였습니다. 소스와 연구 기록과 영수증과 버전별 산출물은 과거 자료로 보존합니다.

과거 구현기록된 프로시저 항목기록
LIL205/205당시의 전체 프로시저 표
초기 LIT84/205초기 구현 기록
후속 토파즈 LIT 계약 v7205/205계약에 기록된 current 수치
리스펙스 LIT 소비 계약 v2204/205소비자가 기록한 기준 수치

각 수치는 해당 기록 당시 profile-required로 표시한 레지스트리 205행을 기준으로 합니다. 원래 결과는 해당 소스와 실행기와 계약 버전에 맞춰 읽으세요. 이전 설치와 비교 안내는 v1.20 실행 엔진 참조에 보존되어 있습니다.

바이트코드 구현

리스펙스 VM인 lispex-rust-vm/v1은 네이티브에 들어 있습니다. Rust 소스 프런트엔드와 Core IR 컴파일러가 만든 바이트코드를 실행합니다.

Core IR은 이름의 참조를 정한 중간 표현입니다. 네이티브는 현재 언어 프로파일 전체를 정해진 lispex.core-ir/v1 형식으로 변환하고 검사합니다. 검사 결과에서 변수 셀과 캡처한 변수와 꼬리 위치와 요구사항과 소스 위치와 식별자를 볼 수 있습니다.

컴파일러는 검증된 Core IR을 lispex.bytecode/v1로 변환합니다. 검증기는 VM 상태를 만들기 전에 바이트코드를 검사합니다. 리스펙스 VM은 내장 프로시저 205개 항목을 모두 구현합니다. 사용자 프로시저를 호출하는 18개 항목은 반복형 VM 상태 기계로 호출을 관리합니다.

결과와 자원 사용량 읽기

비교 보고서는 결과와 자원 사용량과 소스 및 제작 출처를 서로 다른 필드에 기록합니다. 선택한 실행 방식의 오류와 자원 상태는 각각 유지합니다. 보고서는 새 경로에 원자적으로 기록하므로 완성된 파일만 나타납니다.

의미 차이와 자원 차이는 따로 읽으세요. 의미 관측은 상태와 주 진단 코드와 메시지와 출력과 값과 경고와 진단을 포함합니다.

비교 제품비교할 자원 관측
리스펙스 인터프리터와 리스펙스 VM출력 바이트와 완료한 루트

리스펙스 인터프리터는 자체 깊이 모델을 사용합니다. 과거 소스 인터프리터 비교는 자원 종료 결과와 다섯 사용량 필드를 기록했습니다. 기록에는 각 구현의 사용량 수치가 별도로 남아 있습니다. 프로시저 지원 수와 자원 사용량 계수기는 서로 다른 질문에 답합니다. 계수기 정의는 자원 참조에서 확인하세요.

비교에 쓰인 제품 확인하기

기록 정보식별하는 것
런타임 구현인터프리터 종류와 버전이 지정된 실행 방식
호출재현할 명령 또는 프레임 단위 요청 프로토콜
파일 식별자정확한 실행 파일과 WASM과 연결 코드 바이트
소스와 제작 출처 기록선언한 소스와 제품을 만든 방법
자원 프로파일이름 붙은 한도와 보고된 사용량 계수기
비교한 사례정확한 입력 모음과 인터프리터 종류와 대상 플랫폼과 호스트 변형

이 정보로 어떤 제품과 실행 조건에서 비교 결과가 나왔는지 확인할 수 있습니다. 명령 형식과 실행 상세는 바이트코드와 리스펙스 VM에서 설명합니다.

과거 비교 기록 읽기

과거 비교 기록은 이름 붙은 사례 144개를 다룹니다. 실행에 쓴 Rust와 LIL과 LIT 실행 파일, 자원 프로파일, 결과, 재실행을 식별합니다. 사례 수는 실제 실행한 입력을 나타냅니다. 프로시저 표는 다른 분모를 사용하는 구현 범위입니다.

원본 보고서와 입력과 카탈로그와 제품, 해당 버전의 도구를 함께 보관하세요. 과거 기록의 범위는 엔진 실행 결과 비교에서 확인하세요.

관련 제품 기능

애플리케이션 호출에는 평가기 참조의 결정 평가기와 전체 프로파일 평가기를 구분해 사용하세요. 편집기에서 신뢰하는 소스를 평가하고 정해진 구현을 비교하려면 네이티브 MCP를 참고하세요.

컴파일된 리스펙스 바우치

컴파일된 리스펙스 바우치는 리스펙스 VM을 사용합니다. 네이티브는 소스와 연결된 lispex.vouch-compiled-artifact/v1 파일을 만들고 요청을 인증합니다. 수신자가 선택한 정확한 소스에서 Core IR과 바이트코드를 다시 만듭니다. 현재 tree와 Meaning의 일치를 기록하고 검증된 리스펙스 VM 결과와 비교한 뒤 로컬 게이트에 전달합니다.

제품별 대화형 출력

네이티브와 npm과 공개 WASM과 플레이그라운드는 같은 대화형 출력 규칙을 사용합니다. 평가 전에 전체 소스를 읽고 축약 문법을 핵심 형식으로 바꿉니다. 이후 명시적인 출력과 성공한 각 형식의 값을 순서대로 표시합니다.

종료 이유출력과 상태
성공출력과 값, 상태 0
일반 실행 오류앞선 형식이 이미 낸 출력 보존, 상태 1
자원 한도 도달빈 출력과 자원 진단 하나, 상태 2

브라우저 결과에는 output, diagnostics, ok, exit_status가 있습니다. 입출력과 권한에서 출력 동작을 예제로 확인할 수 있습니다.

네이티브는 포매팅과 로컬 MCP 작성 서비스도 제공합니다. VS Code와 Open VSX 확장은 설치한 네이티브 실행 파일에 문서 포매팅을 맡깁니다. MCP는 로컬 표준 입출력으로 언어 참조와 프로시저 레지스트리와 신뢰하는 소스의 평가와 진단과 정해진 엔진 비교를 제공합니다. 평가기에는 선언한 바이트와 시간 한도가 적용됩니다. 명령과 결과는 CLI 참조에서 확인하세요.