이 페이지를 마치면 같은 프로그램을 실행하는 엔진 넷인 네 가지 경로의 이름을 말할 수 있고, 지금까지 어떤 경로를 써 왔는지 설명할 수 있으며, 요청한 경로가 없을 때 무슨 일이 일어나는지 예측할 수 있습니다.
미리 알아야 할 것은 .lspx 파일을 실행하는 방법입니다.
첫 프로그램 단원에서 다뤘고, 이 페이지를 읽는 데
새로 설치할 것은 없습니다.
여러분은 이미 경로 하나를 쓰고 있었습니다
지금까지 이렇게 프로그램을 실행할 때마다
lispex rule.lspx여러분은 tree 경로를 쓰고 있었던 것입니다. 이 내장 인터프리터는 Rust로 작성되었으며 소스를 직접 읽어 평가합니다. 일반적인 리스펙스 제품에 기본 경로로 탑재되어 있습니다. 언어의 의미를 정하는 기준이자 언제든 다시 돌아올 수 있는 경로이기도 합니다. 다른 경로를 전혀 접하지 않더라도 부족한 부분은 없습니다. 이 경로 하나만으로도 언어 전체를 사용할 수 있습니다.
네 가지 경로
경로는 홈페이지에서 언급하는 세 곳과 다릅니다. 세 곳은 브라우저 플레이그라운드, npm 패키지, 내려받는 프로그램이며, 이는 리스펙스를 실행할 수 있는 제품을 가리킵니다. 반면 경로는 그 제품 안에 들어간 뒤 실제로 프로그램을 구동하는 엔진을 뜻합니다. 플레이그라운드와 npm 패키지에는 가상 머신이나 미리 만들어 두는 빌드가 포함되어 있지 않으므로 아래 첫 번째 경로만 사용합니다. 내려받는 프로그램은 네 경로를 모두 사용할 수 있습니다.
같은 프로그램을 네 가지 엔진에서 실행할 수 있습니다.
-
tree. 소스를 그대로 읽어서 평가하는 내장 인터프리터입니다. 항상 존재하며 별도의 준비가 필요 없습니다.
-
Rust 가상 머신. 이 역시 내장되어 있습니다. 가상 머신은 소스 대신 미리 준비된 명령을 실행하는 프로그램입니다. 네이티브가 여러분의 소스에서 이 명령을 만드는데, 같은 소스에서는 늘 같은 방식으로 작성하며 실행 전에 검사합니다. 이 경로는
--engine vm으로 명시해서 요청해야 사용합니다. 토파즈는 리스펙스와는 다른 별개의 언어이고 자체 컴파일러를 가지고 있습니다. 아래 두 경로가 그 도구를 빌려 씁니다. 리스펙스 규칙을 토파즈로 옮겨 적은 뒤 토파즈 쪽 도구로 실행하거나 컴파일하는 것이라, 언어가 섞이는 것이 아니라 도구를 빌려 오는 것입니다. -
토파즈 가상 머신. macOS ARM64 환경에서 별도로 설치하는 정확한 토파즈 5.11 가상 머신입니다. 네이티브 바이너리에는 내장되어 있지 않습니다. 제품을 따로 설치한 뒤, 명령에서 필요로 할 때 정확한 제품 절대경로를 직접 넘겨주어야 합니다.
-
미리 만들어 두는 빌드, 곧 AOT. 프로그램을 미리 컴파일하여 만들어 두므로 실행할 때는 소스가 필요 없는 실행 파일입니다. 이를 빌드하려면 정확한 토파즈 컴파일러 설치본과 Rust 도구 디렉터리가 필요합니다. 이렇게 만들어진 제품은 소스 트리 없이 실행됩니다.
네 경로는 별개의 방언이 아니라 모두 동일한 리스펙스 언어를 구현하는 방법입니다. 각 경로는 동일한 의미를 보존하도록 설계되었습니다. 비교 명령은 하나의 정확한 요청에 대해 관측 결과가 일치하는지 확인할 뿐이며, 한 번의 일치가 모든 프로그램이 어디서나 동일하게 작동한다는 증명은 아닙니다.
두 가지 정직 규칙
경로에 신뢰를 부여하는 규칙은 두 가지이며, 두 규칙 모두 한 문장으로 설명할 수 있습니다.
실행 중에는 탐색하지 않습니다. 실행·목록·진단·비교 명령은 PATH,
체크아웃, 환경 변수, 네트워크를 뒤져 경로를 탐색하지 않습니다. 외부 경로는
사용자가 정확한 위치를 직접 전달했을 때만 동작에 참여합니다. 별도 명령인
routes fetch는 정확한 공식 동반 제품 하나를 가져올 수 있지만, 가져온
제품을 선택하거나 실행하지는 않습니다.
대체하지 않습니다. 요청한 경로가 실패하거나 존재하지 않으면 실행은 오류와
함께 중단됩니다. 조용히 다른 경로로 바꿔치기하지 않습니다. Topaz VM이라고
표시된 결과는 토파즈 가상 머신이 생성한 것이거나, 아니면 아예 생성되지 않은
것입니다.
두 규칙이 보호하는 목적은 같습니다. 실행이 성공했다면 어느 경로가 그 답을 만들어 냈는지 정확히 알 수 있습니다.
경로들이 같은 답을 내는지 확인하기
정확한 토파즈 가상 머신을 설치하고 해당 소스와 일치하는 미리 만든 제품까지 갖추었다면, 네이티브에서 하나의 정확한 요청을 네 경로로 모두 실행하여 진단 영수증 하나를 생성할 수 있습니다. 이 영수증은 기존 파일 위에 덮어쓰지 않습니다.
lispex compare-routes \
--topaz-vm /absolute/tools/lispex-topaz-vm/product \
--aot-product /absolute/products/rule-aot \
--receipt route-comparison.json \
rule.lspx이 명령을 실행하려면 정확한 두 외부 제품이 모두 필요합니다. 제품이 누락되었거나 소스와 일치하지 않으면 이용 가능한 경로만 모아 비교를 줄이지 않고 실행이 실패합니다. 영수증에는 네 경로의 관찰 기록이 담깁니다. 이 일치는 해당 소스·입력·제품 집합·자원 경계에 대한 근거일 뿐이며, 경로들이 모든 환경에서 동등하다는 증명은 아닙니다.
직접 해 보기
동료가 작성한 스크립트가 토파즈 가상 머신 경로를 요청하고 있는데, 실행 대상 컴퓨터에는 해당 토파즈 가상 머신이 설치되어 있지 않다고 가정해 봅시다. 정답을 열어 보기 전에 무슨 일이 일어날지 예상해 보세요.
답 보기
실행은 누락된 경로의 이름을 밝히는 오류와 함께 실패합니다. 내장 인터프리터로 대체하지 않으므로 잘못된 이름표가 붙은 답이 나올 수 없습니다. 고치는 방법 역시 명시적입니다. 정확한 동반 제품을 설치하고 그 위치를 지정하거나, 해당 컴퓨터에 실제로 존재하는 경로를 요청하도록 스크립트를 변경하면 됩니다.
다음으로 넘어가도 되는 시점
네 가지 경로의 이름을 떠올릴 수 있고, 사전 준비 없이 실행되는 경로가 무엇인지 구분하며, 두 가지 정직 규칙을 자기 말로 설명할 수 있다면 이 단원을 잘 마친 것입니다.
실제 작업에서 경로를 고르고 싶다면 실행 방식 고르기 안내서로 이어 가세요. 동반 제품을 설치하고 싶다면 선택형 추가 엔진 설치하기 안내서를 따라가세요.