리스펙스는 나중에 다시 읽기 쉬운 결정을 적기 위한 작은 리스프입니다. 규칙은 평범한 텍스트이고, 문서에 적힌 한계 안에서는 같은 입력이 같은 관측 결과를 냅니다. 결과는 애플리케이션 안으로 사라지는 대신 데이터 모양으로 남을 수도 있습니다.
먼저 모양을 봅시다
리스펙스 프로그램은 값과 괄호로 묶은 폼으로 이루어집니다. 평가되는 폼에서는 맨 앞의 이름이 할 일을 나타내고, 나머지 식이 입력을 제공합니다.
(+ 2 3)결과
5겹친 식은 안쪽부터 읽습니다. 아래에서 define은 값에 이름을 붙이고, >=가
질문에 답하고, if가 두 데이터 값 중 하나를 고릅니다.
(define total 62)
(if (>= total 50)
'(decision free-shipping)
'(decision standard-shipping))결과
(decision free-shipping)'(decision free-shipping) 앞의 작은따옴표는 “이 리스트를 데이터로 유지하라”는
뜻입니다. 따옴표가 없다면 리스펙스는 decision이라는 프로시저를 호출하려
합니다. 폼을 실행할 수도 있고 데이터로 보존할 수도 있다는 이 작은 차이는
과정에서 천천히 익히게 될 유용한 개념 가운데 하나입니다.
어떤 일에 잘 맞을까요?
자격 확인, 환불 기간, 가격 경계, 경로 선택, 반복 가능한 변환처럼 입력과 답이 분명한 규칙에 잘 맞습니다. 레퍼런스 런타임은 결정적인 평가 규칙, 가능한 경우의 정확한 산술, 안정적인 진단을 사용합니다. 이러한 특성 덕분에 작은 규칙을 다시 실행하고 비교하기가 쉬워집니다.
리스펙스는 의도적으로 범용 운영체제 스크립트 환경을 목표로 하지 않습니다. 네트워크 호출, 시계, 난수, 패키지 가져오기를 결정 안에 숨겨 두지 않습니다. 애플리케이션이 입력을 전달하고, 반환된 값으로 무엇을 할지 결정합니다.
원하는 입구를 고르세요
| 하고 싶은 일 | 갈 곳 |
|---|---|
| 여섯 단계로 언어 배우기 | 학습 경로 |
| 설치 없이 바로 실행하기 | 플레이그라운드 |
| 일상 문법을 한 페이지에서 훑기 | 문법 한눈에 보기 |
| 로컬 런타임 설치하기 | 첫 프로그램 |
| 검증된 네이티브 아티팩트 만들고 실행하기 | 검증된 바이트코드 실행하기 |
| 정확한 폼이나 프로시저 찾기 | 구문 레퍼런스 또는 프로시저 색인 |
정확한 리스펙스 이미지, 검증된 네이티브 바이트코드, 리스펙스 바우치도 실제 제품 기능이지만 언어를 배우기 위한 선행 조건은 아닙니다. 이미지는 정확한 소스를 담고, 바이트코드는 가상 머신을 거치는 명시적인 로컬 경로를 제공합니다. 리스펙스 바우치는 나중에 기록된 결정을 검사합니다. 규칙에 서명한 주체를 인증하고, 사용자가 가진 소스와 입력 사본을 묶으며, 정확한 로컬 결정 하나를 요구할 수 있습니다. 먼저 작은 언어를 익히면 이러한 경로들도 훨씬 잘 이해할 수 있습니다.
신뢰하지 않는 규칙을 실행할 때
리스펙스를 평범하게 실행하는 방식은 실행 중인 규칙이 일으킬 수 있는 작업을
전부 세지 않으며, 그 규칙에 매겨지는 메모리도 전부 세지 않습니다. 경로를 골라
쓰는 제품도 마찬가지이고, lispex mcp serve가 제공하는 작성용 평가도
마찬가지입니다. 이 방식들은 모두 신뢰하는 규칙에 사용하세요.
신뢰하지 않는 규칙에는 내려받는 프로그램의 lispex embed를 사용합니다. 이
제품은 언어를 더 작게 제한한 묶음입니다. 작업에 한도를 걸고 메모리에도 한도를
거는데, 두 한도 모두 매번 같은 값으로 나옵니다. 호스트 컴퓨터에 접근하지 않고
다른 실행 방식으로 넘어가지도 않습니다. 다만 이 한도는 같은 프로세스 안에서
지켜지는 것이지 운영체제 프로세스 샌드박스가 아닙니다. 호출을 취소하거나
프로세스가 강제 종료되면 결정도, 완료된 실행이 남기는 작은 이동용 기록인
휴대 코어도 만들어지지 않습니다.
문서가 지키는 약속
이 문서는 제품이 하는 일과 주장하지 않는 일을 구분합니다. Rust가 레퍼런스 런타임입니다. 토파즈는 별개의 언어이자 그 컴파일러이며, 리스펙스는 두 자리에서 토파즈를 씁니다. 준비된 명령을 실행하는 토파즈 가상 머신 하나와, 규칙을 미리 컴파일해 독립 실행 파일로 만드는 AOT 도구체인 하나입니다. 리스펙스로 쓴 리스펙스 인터프리터인 LIL과 토파즈로 쓴 리스펙스 인터프리터인 LIT는 지원 범위가 제한된 검증 백엔드이며, 조용히 대체되는 경로가 아니고 모든 구현이 어디서나 일치한다는 증명도 아닙니다. 입문 과정에서는 이 내용을 몰라도 되며, 배포나 교차 확인이 필요할 때 런타임과 백엔드로 돌아오면 됩니다.
문서가 되풀이해 쓰는 낱말
매뉴얼과 가이드와 릴리스 기록에는 몇몇 낱말이 되풀이해 나옵니다. 입문 과정에는 하나도 필요하지 않습니다.
| 낱말 | 뜻 |
|---|---|
| 평가기 | 규칙을 실행하는 프로그램입니다 |
| tree | 소스를 직접 읽어 실행하는 내장 인터프리터입니다 |
| VM | 소스를 읽는 대신 미리 준비된 명령을 실행하는 가상 머신 프로그램입니다 |
| AOT | 실행 전에 규칙을 미리 프로그램으로 컴파일해 두는 방식입니다 |
| 정규 | 언제나 같은 방식으로 적어서 같은 입력에서 같은 바이트가 나오는 형태입니다 |
| bounded | 사용할 수 있는 작업량과 메모리의 정해진 한도 안에서만 실행된다는 뜻입니다 |
| meter | 한 번의 실행이 얼마나 일했는지 측정하는 계수기입니다 |
| 경로 | 규칙을 실행하는 한 가지 방식입니다 |
| 경로 잠금 | 선택한 경로만 기록하고 그 제품이 컴퓨터 어디에 있는지는 기록하지 않는 작은 파일입니다 |
| 휴대 코어 | 규칙과 입력, 한도, 한 번의 실행 결과를 한데 묶어 둔 작은 기록입니다 |
| 영수증 | 한 번의 실행이나 설치가 무엇을 남겼는지 적은 기록입니다 |
| 검사 묶음 | 여러 검사를 하나의 판정으로 묶어 실행하는 일입니다 |
| 표면 | 네이티브와 npm, WebAssembly 빌드, 플레이그라운드처럼 리스펙스가 제공되는 자리를 뜻하고, 언어의 표면이라고 하면 언어에서 지원되는 부분을 뜻합니다 |
| 토파즈 | 별개의 언어이자 그 컴파일러입니다. 리스펙스는 준비된 명령을 실행하는 토파즈 가상 머신과, 규칙을 독립 실행 파일로 미리 컴파일하는 AOT 도구체인으로 씁니다 |
| LIL | 리스펙스로 쓴 리스펙스 인터프리터입니다 |
| LIT | 토파즈로 쓴 리스펙스 인터프리터입니다 |
| WASM | WebAssembly 빌드를 뜻합니다 |