지금의 언어
리스펙스에는 결정적 수 체계, 어휘 바인딩 변경, 올바른 꼬리 호출, 다중 값,
오류와 guard, 일회용 위쪽 탈출 연속, 불변 집합 값, 변경 가능한 벡터,
문서화된 프로시저 라이브러리가 있습니다.
다회 연속과 재진입, 포트와 일반 I/O, 초월함수, 변경 가능한 쌍·문자열· 바이트벡터, 완전한 Unicode 대소문자 접기, 사용자 매크로는 현재 범위 밖입니다. 다른 Scheme 구현에 있다는 이유로 사용할 수 있다고 추정하면 안 됩니다.
범위 원장
| 영역 | 현재 지원 | 보류하거나 명시적으로 제외 |
|---|---|---|
| 제어 | 일회용 위쪽 call/cc, dynamic-wind, 핸들러, guard | 다회 연속과 동적 재진입 |
| 수 | 임의 정밀도 정수, 기약 유리수, 유한 실수, 정확 정수 지수·제곱근 | 복소수와 플랫폼 초월함수 |
| 변경 | 어휘 셀과 벡터 | 변경 가능한 쌍, 문자열, 바이트벡터 |
| 효과 | 정규 출력과 명시적 호출 경계 | 포트, 파일, 네트워크, 시간, 무작위 |
| 소스 도구 | 네이티브의 원문 보존 레이아웃 fmt, 조용한 검사, 안전한 쓰기와 설치 CLI를 쓰는 에디터 연동 | npm·브라우저 포매팅, 구조적 줄 재배치, LSP, 자동 완성, 진단 |
| 메타프로그래밍 | 내장 파생 형식의 위생적 정규화 | 사용자 매크로와 define-syntax |
| 실행기 | Rust 205/205, LIL 205/205, LIT 84/205 | 지원하지 않는 LIT 121행과 범위 없는 전체 언어 동등성 |
| 컴파일 실행 | 네이티브 정규 Core IR 검사, 정규 lispex.bytecode/v1, strict verifier, 명시적 Rust·정확한 설치형 Topaz VM, macOS ARM64에서 정확한 Topaz 5.11로 생성한 소스 없는 정확성 우선 AOT 제품과 덮어쓰지 않는 tree/Rust VM/Topaz VM/AOT 비교 영수증. 모든 경로는 명시적이며 폴백하지 않음 | 임의 산출물·비교 보고서의 권한 승격, Topaz 기반 compiled Vouch, npm·브라우저 VM/AOT, 독립 동등성 증명, 직접 WASM, 크로스 컴파일, 최적화·안정 ABI 주장, 새 문법이나 주변 capability |
| 정확 이미지 | 같은 Rust의 PNG/ZIP 생성·검사·복원·명시적 실행과 제한된 바우치 소스 입력 | OCR, 카메라 복원, 변형 허용, 기밀성, 서명, 출처, 권한 |
| 공개 식별자 | 네이티브/npm의 key-id, engine-id, source-id, input-id | 출처, 신뢰, 입력 승인, 인증, 신선도, 실행 권한 |
| 정책 설정 | 검토한 공개 키·엔진 다이제스트·정확 소스로 정책 v1 생성과 검사 | 개인 키 처리, 자동 등록, 아티팩트가 고르는 신뢰, 정책의 정당성 |
| 소스 승인 | 정책 v1의 키별 정확 소스 허용 목록 | 입력·요청 승인, 규칙 정당성, 재생 방지, 외부 행위 허가 |
| 이식 입력 | 최대 16 MiB의 정규 envelope/source/input bundle과 원시 형식 | 언어 기능, 새 영수증 분모, 신선도 또는 권한 |
별도 제품이 언어를 넓히지 않는 이유
Core IR과 바이트코드는 기존 lispex-profile-1.5를 해석하고 컴파일합니다.
Rust VM은 다른 명시적 제어 구조로 같은 프로필을 실행하지만 문법, datum,
primitive, 파일·네트워크·시계·무작위 capability를 추가하지 않습니다.
tree와 VM은 같은 Rust 값과 primitive leaf를 공유하므로 새 독립 백엔드
계보도 아닙니다.
Topaz VM은 정확히 설치한 별도 제품으로 같은 검증 바이트코드를 실행합니다. 리스펙스는 제품·요청·결과 식별자, 전체 폭 자원 카운터, 폴백 0을 검사하지만 이 경로는 Vouch에 들어가지 않으며 독립적인 전체 언어 동등성을 증명하지 않습니다.
LIL은 현재 capability 205행을 모두 지원합니다. LIT는 84행을 지원하고 121행을 거부합니다. 백엔드 등록은 이 숫자를 숨기거나 Rust 프로필을 다시 정의하지 않습니다. 역사적 세 계열 영수증도 검사한 144사례 중 59사례의 전 계열 일치만 기록합니다.
현재 LIL은 caar부터 cddddr까지 합성 쌍 접근자 전체를 지원합니다. 문자는
오른쪽부터 읽으므로 (caddr x)는 (car (cdr (cdr x)))와 같습니다. 이는
기존 프로필을 넓힌 것이 아니라 LIL의 구현 범위를 넓힌 것입니다.
LIL은 abs, square, zero?, positive?, negative?, boolean=?,
symbol=?도 자체 합성합니다. 모두 기존 프로필 연산을 재사용하므로 호스트
capability나 언어 분모를 추가하지 않습니다.
현재 LIL 범위에는 유한 실수 complex?·rational?·real?, 구조적
!=, memv·assoc·assq·assv 검색군도 들어 있습니다. 비교 규칙은
구분됩니다. assoc는 구조 동등성을 쓰고 나머지 세 검색은 현재의
eq?·eqv? 동일성 규칙을 씁니다.
대소문자를 그대로 보는 문자·문자열 순서 비교도 LIL에서 사용할 수 있습니다:
char<?, char<=?, char>?, char>=?, string<?, string<=?,
string>?, string>=?. 기존 Unicode scalar 순서를 드러낼 뿐 case
folding이나 로케일 정렬을 추가하지 않습니다.
list-copy, list-ref·nth, list-tail, make-list, make-string,
string->vector, vector->string도 현재 LIL 범위에 들어 있습니다.
목록 복사는 쌍의 뼈대를 새로 만들고, 목록 꼬리는 원본과 구조를 공유합니다.
기본 채움값은 결정적으로 고정되어 있으며 문자열·벡터 범위는 UTF-8 바이트가
아닌 Unicode 문자 수로 셉니다. 기존 프로필 행을 구현한 것이지 새 언어
의미를 더한 것은 아닙니다.
문자·문자열의 대소문자 판정·변환·대소문자 무시 순서도 선언된 Unicode
호스트 커널을 통해 현재 LIL 범위에 들어 있습니다. char-ci<?와
string-ci<? 계열, char-whitespace?, char-foldcase,
string-upcase·string-downcase·string-foldcase가 이 경계에
포함됩니다. 문자는 문자 하나를
돌려주는 simple mapping, 문자열은 길이가 바뀔 수 있는 full mapping을
씁니다. v1 foldcase는 완전한 Unicode CaseFolding이 아니라 문서에 공개한
lowercase 기반 근사입니다. 이 호스트 커널 의존성은 독립 구현도 숨은
fallback도 아닙니다.
현재 LIL 범위에는 floor, ceiling, round, truncate, exact,
inexact, inexact->exact, exact->inexact, even?, odd?, min,
max도 포함됩니다. 반올림은 exactness를 보존하고 round는 정확한
절반을 가까운 짝수로 보냅니다. (exact 0.5)는 십진 문자열 해석이 아니라
실제 이진 값을 정확한 dyadic 1/2로 바꿉니다. 짝홀 판정은 정수를
요구하며, min·max는 혼합 수 타워를 정확히 비교하되 입력 하나라도
inexact면 결과도 inexact입니다. 인자 검사와 두 fold는 LIL이, 스칼라
산술은 선언된 수 호스트 커널이 맡습니다.
LIL은 modulo, quotient, remainder, floor-quotient,
floor-remainder, floor/, truncate-quotient, truncate-remainder,
truncate/, gcd, lcm도 exact 정수 중간값과 공개된 inexact contagion
규칙으로 구현합니다. floor와 truncate 계열의 부호 규칙은 서로 다르며
슬래시 형식은 두 값을 돌려줍니다. 결정적인 expt는 exact 정수 지수로
한정되고, exact-integer-sqrt는 제곱근과 나머지를 돌려줍니다. 이 고급
연산 두 개만 선언된 수 호스트 커널을 쓰며 일반 초월 거듭제곱은 현재 언어
프로필 밖에 남습니다.
이제 LIL은 컬렉션 고차 프로시저 12행도 모두 직접 실행합니다. all?,
any?, filter, fold-left, fold-right, for-each, map, reduce,
string-for-each, string-map, vector-for-each, vector-map이 명시적
연속 프레임에서 콜백 순서·단락 평가·값 개수·오류·탈출을 보존하며 호스트
콜백을 쓰지 않습니다. 문자열과 벡터 입력은 순회 전에 스냅샷합니다.
LIL은 display, write, newline, println도 한도가 있는 private
effect sink로 직접 실행합니다. 명시적 출력과 최상위 결과 자동출력은 정확한
stdout 순서를 공유하지만, 완료된 최상위 값은 영수증에서 별도 투영으로
남습니다. 출력 프로시저는 0개 값을 반환하며 뒤의 런타임 오류가 앞서 쓴
바이트를 지우지 않습니다.
호환용 표기 %, list-first, list-rest도 LIL에서 실행됩니다. 새 코드에는
modulo, first, rest를 쓰세요. 실제 deprecated primitive가 호출될 때만
W330 또는 W331이 소스 호출 위치마다 한 번씩 최초 발생 순서로 기록됩니다.
같은 이름을 다른 바인딩으로 가리면 경고가 없고, 이후 정본 연산이 실패해도
이미 기록한 경고는 남습니다. 경고는 stdout·값·오류 진단과 섞이지 않습니다.
정확 이미지는 소스 바이트의 되돌릴 수 있는 표현일 뿐 새 datum, 원시 프로시저, 리더 문법, 컴파일러가 아닙니다. 이미지가 바우치에 들어가도 정확한 소스를 제공하는 방식만 바뀌며 정책·요청 결속·재실행·gate 단계는 그대로입니다.
세 가지 표지가 범위 혼동을 막습니다
profile-required는 현재 언어 분모의 205개 capability 모두를 가리킵니다. 각 백엔드의 구현 여부는 별도로 측정합니다.host-adapter-only는 파일·네트워크·시계·무작위·프로세스·환경 접근을 가리킵니다. 호스트가 리스펙스 호출 바깥에서 수행할 수는 있지만 게스트의 주변 권한은 아닙니다.future-profile은 다회 연속 재진입, 게스트 입력, 초월함수, 추가 변경 연산, UTF-8 codec, 정확한 Unicode case folding처럼 검토했지만 현재 언어에는 넣지 않은 의미 기능을 가리킵니다.
이 표지는 구현하지 못한 항목을 숨기기 위한 말도, 미래 릴리스 약속도 아닙니다.
흔한 오해
보류 기능이나 다른 구현의 동작은 명시적 의미론 결정 없이 현재 리스펙스 기능으로 승격되지 않습니다. 실제 의미 변경은 명세, Rust, 시험, 영수증, 문서를 함께 바꿔야 합니다.
다음으로
프로시저 단위의 정확한 지원은 레퍼런스에서, 실행기별 측정 범위는 백엔드 매트릭스에서 확인하세요.