현재 범위와 보류 기능

현재 프로필은 전체 R7RS-small보다 의도적으로 작으며 Rust 205/205, LIL 205/205, LIT 84/205라는 서로 다른 지원 경계를 공개합니다.

지금의 언어

리스펙스에는 결정적 수 체계, 어휘 바인딩 변경, 올바른 꼬리 호출, 다중 값, 오류와 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, 시험, 영수증, 문서를 함께 바꿔야 합니다.

다음으로

프로시저 단위의 정확한 지원은 레퍼런스에서, 실행기별 측정 범위는 백엔드 매트릭스에서 확인하세요.

프로시저 색인 · 백엔드 매트릭스