토파즈 5.20.0이 현재 릴리스 버전입니다. 현행 언어 모드는 topaz-5.20입니다.
5.20.0 뒤의 소스 스냅샷은 github.com/studiohaze/topaz에 동결 미러로 공개되어 있습니다. 개발은 비공개로 이어지고, 공식 릴리스는 topaz.ooo와 npm에 나옵니다.
다음 명령으로 설치 상태를 확인하세요.
topaz version --verbose이 명령은 컴파일러, 언어 모드, 런타임, Rust 백엔드 식별자를 출력합니다. 설치 관련 문제를 제보할 때는 출력 결과 전체를 그대로 첨부하세요.
컴파일러 선택하기
토파즈는 컴파일러가 관여하는 모든 명령에 Rust Stage 0을 기본값으로 사용합니다.
설치된 Stage 2 self 컴파일러는 허용된 현재 모드 경로에서 --compiler self로
명시적으로 선택할 때 계속 사용할 수 있습니다.
topaz check app/main.tpz
topaz check app/main.tpz --compiler self
topaz test --root app --locked --compiler self
topaz emit app/main.tpz --compiler self
topaz emit app/main.tpz --target python --compiler self --out-dir python-source
topaz build app/main.tpz --compiler self --out-dir app-product
topaz build app/main.tpz --target web --compiler self --out-dir web-product
topaz dev --root web-app --locked --compiler self
topaz fmt app/main.tpz --compiler self
topaz lsp --compiler self
topaz doc --root app --locked --compiler self --out-dir api-docs
topaz compiler observe app/main.tpz --compiler self --out-dir observation
topaz check app/main.tpz --compiler rust
topaz compiler status --json선택 생략은 --compiler가 없을 때 토파즈가 기본적으로 Rust Stage 0을 실행함을
의미합니다. 명시적 self는 허용된 현재 모드 경로에서 설치된 Stage 2 self 컴파일러를
호출하기 위해 --compiler self를 지정하는 것을 의미합니다. 실행은 지정된 컴파일러에
따라 직접 진행되며 자동 재시도나 조용한 폴백은 수행되지 않습니다. 명시적 self 선택은
parse, dump-ast, check, 현재 프로필, export 보고서, run, test,
bench, 잠긴 패키지, compiler observe, 검사된 Rust·Python 생성, 네이티브·Web
계열 빌드, Web·서비스 dev, 코드 포맷팅, LSP, 패키지 문서 생성을 지원합니다.
단일 LSP 프로세스는 하나의 컴파일러 선택을 유지하므로 설정을 변경한 뒤 에디터 세션을
재시작하세요.
컴파일러를 사용하는 명령에 --verbose 옵션을 추가하면 확정된 선택이 명시적 선택인지,
현재 기본값인지, 또는 호환 선택인지 표시합니다.
CLI는 실제 언어 모드를 파악할 때까지 컴파일러 선택 의도를 유지합니다. 패키지
명령에서는 먼저 루트 topaz.toml만 읽어 검증합니다. 의존성 해석, 잠금 파일
검사, 소스 로드, 캐시 및 출력 작업은 그 이후에 시작됩니다. 이전 언어 모드를
지정한 패키지는 선택자를 생략하거나 rust를 직접 지정할 경우 Rust를 사용합니다.
self를 직접 지정하면 이후 작업을 진행하기 전에 오류로 중단됩니다. 이러한 실행 순서 덕분에 현재 모드의
기본 선택과 명시된 Rust 호환 선택을 서로 다른 결정으로 구분하여 관찰할 수 있습니다.
설치된 프로세스는 변경 불가능한 셀프호스팅 컴파일러 이미지를 한 번만 검증하고 디코딩한 뒤, 이렇게 준비된 프로그램을 self 컴파일러와 LSP 작업 스레드가 공유하여 사용합니다. 캐시 키에는 이미지, 소스 집합, 스키마, 런타임 템플릿, 툴체인 식별자가 포함됩니다. 하나라도 일치하지 않으면 self 작업이 중단됩니다. 타깃 소스, 진단 정보, 생성 소스 및 관리 아티팩트는 요청 시마다 다시 계산하며 준비된 컴파일러 상태를 재사용하지 않습니다. 이 준비 과정은 문서에 규정된 콜드 스타트, LSP 및 메모리 임계값 내에서 실행됩니다.
compiler status --json은 머신이 읽을 수 있는 기준 정보를 출력합니다. 설치된
생성자, 프로그램 이미지, 소스 집합 식별자, 지원 경로 및 거부 경로, 경로별 생략
선택, 기본값, 호환·복구 선택, 무폴백 정책이 여기에 포함됩니다. 관리 아티팩트에는
선택이 명시적이었는지, 현재 기본값이었는지, 아니면 호환 선택이었는지 여부도 함께 기록됩니다.
설치 제품의 복구 경계
설치된 제품에서 패키지 검사, 테스트, 빌드 및 소스 없는 실행은 Rust Stage 0 기본값을
사용합니다. 명시적 self는 허용된 현재 모드 경로에서 --compiler self를 전달하여
별도로 선택할 수 있습니다. 동일한 관리 출력 경로에 Rust와 self로 재빌드하면 출처를
원자적으로 교체합니다.
동일한 설치 기본값으로 2모듈 학습 애플리케이션을 검사하고 선택 테스트를 실행한 후 네이티브 릴리스 아티팩트로 패키징하면 소스 코드를 제거한 상태에서도 실행할 수 있습니다. 운영 현황 장부는 해결된 제품 문제만 종결 처리하며, 보다 광범위한 컴파일러·통합 검사는 공개 릴리스 후보에서 수행합니다.
설치된 Stage 1 및 Stage 2 경로는 새 소스에서 각각 새로운 관측 데이터를 생성하여 검증할 수 있습니다. 명시적 self 선택으로 새 네이티브 아티팩트를 생성하고 소스 코드 없이 실행할 수도 있습니다.
npm으로 설치된 결과물은 두 컴파일러 선택지를 단일 실행 파일에 내장합니다. 저장소를
checkout할 필요가 없습니다. 어떤 컴파일러로 빌드했든 토파즈 소스를 제거한 후에도
결과물을 실행할 수 있습니다. 설치된 셀프호스팅 컴파일러 이미지가 없거나
손상된 경우 self 요청은 즉시 실패합니다. Rust 컴파일 결과를 차용하거나 자동으로
재시도하지 않습니다. 복구를 직접 선택할 때만 원래 명령을
--compiler rust로 다시
실행하세요. Rust는 언제든지 별도로 사용할 수 있습니다. 공개된 Stage 0 복구 키트는 자동
폴백이 아닌, 수동으로 실행하는 오프라인 재구성 경로입니다.
설치된 self 컴파일러는 버전이 명시된 완전한 현재 모드 컴파일 아티팩트를 직접 생성합니다. 여기에는 순서가 고정된 모듈, 토큰 및 AST, 이름 해석 및 export, 타입 진단 및 프로필 진단, 로어링 결과와 런타임 요구 사항, 생성된 Rust 코드, 정확한 호출 출처 및 결과 출처 정보가 포함됩니다. 호스트 어댑터는 해당 정보를 검증하고 디코딩할 뿐, 누락된 컴파일러 결정을 자체적으로 재구성하지 않습니다. 허용된 명령 경로에서는 공유 패키지 호스트와 런타임이 검증된 동일한 아티팩트를 받아 사용합니다.
self의 Rust 코드 생성은 고정점 IR 테이블을 그대로 보존하고 일반 애플리케이션 호스트
파사드만 추가합니다. 이 테이블은 타깃 전용 공유 런타임이 실행합니다. 해당
런타임에는 컴파일러 이미지가 포함되지 않으며, Rust
파서·리졸버·검사기·로어러·생성기를 실행할 수도 없습니다. 네이티브 아티팩트
매니페스트는 선택한 컴파일러와 생성자, 컴파일러 소스 집합 및 타깃 소스 집합,
컴파일 아티팩트, 생성 소스 해시, targetCompilerFallback: false를 기록합니다.
사용할 수 있는 제품 경로
- CLI는 파일 및 패키지의 서식을 맞추고, 검사하고, 테스트하고, 실행하고, 생성 소스를 내보내고, 아티팩트를 빌드합니다.
- 네이티브 빌드는 해당 플랫폼에서 독자적으로 동작하는 실행 파일을 생성합니다.
- Python 빌드는
program.py및topaz_py_rt.py를 생성합니다. 실행하려면 Python 3.11 이상 버전이 필요합니다. - Raw Web 및 Web Worker는 기존 JavaScript 호스트가 사용할 WASM 패키지를 생성합니다.
- Web 애플리케이션은 완전한 관리형 정적 브라우저 아티팩트를 생성합니다.
- HTTP 서비스는 고정된 리스너, 요청, 대기열, 타임아웃, 로그, 종료 설정을 갖춘 관리형 네이티브 HTTP/1.1 프로세스를 생성합니다.
- 패키지 명령은 매니페스트, 잠금 파일, 경로 의존성, 검사된 로컬 벤더 의존성을 활용합니다.
topaz lispex embed run은 설치 바이너리의 평가기로 선언된 리소스 한도에 따라 리스펙스 요청 하나를 실행합니다.topaz lispex embed info --json은 구성 요소, 프로필, 계약, 런타임, 무폴백 식별자를 출력합니다.- 브라우저 플레이그라운드는 네이티브 CLI를 설치하지 않고도 검사와 인터프리터 실행을 체험할 수 있도록 지원합니다.
리스펙스 평가기 실행하기
해당 기능은 지정된 일반 파일 및 경로 4개를 인자로 받습니다. 출력 디렉터리는 미리 생성되어 있으면 안 됩니다.
topaz lispex embed run \
--source rule.lspx \
--input value.lpxvalue \
--limits limits.json \
--output lispex-result평가가 완료되면 result.lpxvalue와 report.json이 생성됩니다. 결정론적
의미 오류나 리소스 임계값 초과의 경우 report.json만 남깁니다. 요청 거부, 계약
실패, 엔진 오류 발생 시에는 출력 디렉터리를 생성하지 않습니다. 커밋되지 않은 결과와 트랜스크립트
바이트는 경계 외부로 노출되지 않습니다.
평가기·프로필·런타임 정책·수용 조건은 설치된 아티팩트에 고정됩니다. 평가기·프로필 선택기, 사이드카 다운로드, 콜백, 임포트, 폴백은 없습니다. 보고서에는 토파즈 실행과 수용 결과가 기록되며, 이식 가능한 리스펙스 형식 코어는 애플리케이션 아티팩트 API가 생성합니다. 두 경계 간 차이점은 리스펙스 평가기와 LIT에서 확인하세요.
잠긴 std.lispex 완전한 현재 프로필 API는 인터프리터와 다섯 네이티브 릴리스
타깃에서 실행됩니다. 매니페스트, 잠금, 빌드, 아티팩트, 재실행 워크플로는
리스펙스 규칙 실행하기를
참조하세요. generated-python, raw-web, worker-web, managed-web,
http-service, no-capability, mcp-empty-component-set 경로는 출력이나 실행
전에 거부합니다. 폴백은 없습니다.
컴파일러 관찰 자료 살펴보기
설치된 컴파일러 관측 결과 캡처하기
설치된 CLI는 현재 검사 컴파일러 파이프라인의 상태를 기록할 수 있습니다. 생성된 Rust 소스 단계까지의 내역을 단일 정본 관리형 번들로 묶어 제공합니다.
topaz compiler observe --root my-app --locked --out-dir compiler-observation
topaz compiler validate compiler-observation출력 경로는 my-app 외부에 지정하세요. 패키지 내부에 둘 경우, 다음 관찰 수행 시 관리형 출력
디렉터리 자체가 패키지 구성 정보로 오인될 수 있습니다. 번들에는 정확한 소스
바이트 및 소스 집합, 원시 토큰과 레이아웃 토큰, AST, 이름 해석, 구조화된 타입,
호출, 클로저 캡처, 소스 독립적 로어링, 런타임 연산, 생성된 Rust 코드, 진단,
요청, 응답, 출처 정보가 포함됩니다. 해당 번들은 소스 패키지와 동일한 보안 수준으로
보호하세요.
관측 결과 번들 검증하기
validate 명령은 읽기 전용입니다. 재컴파일을 수행하지 않으며 원본 소스 트리를 참조하지도
않습니다. 정본 인코딩, 스키마, 순서, 상호 참조, 완전성, 크기, 해시값만
검증합니다. 출처 정보에는 생성자가 Rust Stage 0으로 명시됩니다. 이는 이 관찰
경로의 구성 방식을 설명할 뿐, 다른 컴파일러 단계가 어떤 언어로 구현되었는지를 의미하지는
않습니다.
명시적 프런트엔드 프리뷰 사용하기
명시적인 프리뷰 경로는 토파즈로 작성된 현재 렉서, 레이아웃 구현체, 파서, 논리적 import 클로저, 이름 리졸버, 정적 검사기를 실행합니다. 이들 컴포넌트를 구동하는 호스트는 Rust Stage 0입니다.
topaz compiler preview --root my-app --locked --out-dir typed-preview
topaz compiler validate typed-preview이 번들은 타입 검사 단계에서 마감됩니다. 기록에는 engine: topaz-front-end-preview,
생성·결과 단계 0/0, 부트스트랩 호스트 Rust Stage 0가 남습니다. 토파즈 프런트엔드는
현재 문법 및 캐노니컬 AST를 처리하며, 패키지 의존성, 마운트 의존성, 정본 모듈의
논리적 클로저까지 계산합니다. 스코프 및 선언, 참조 및 export, 정적 타입 및
호출, 캡처, 구조화된 진단 처리 역시 담당합니다. 소스 팩트, AST 노드와 Typed 노드, 노드 깊이,
셸 데이터 교환 크기에는 문서화된 상한이 있습니다. 이 경로는 타입 단계에서 끝나며,
낮추기·생성·빌드·실행은 일반 컴파일러 명령이 담당합니다. Stage 1 Preview는 아래의 별도 경로입니다.
프리뷰 작업이 실패하면 해당 지점에서 중단되며 타깃 프런트엔드 작업을 Rust로 다시
시도하지 않습니다. 일반 컴파일러 명령은 설치된 경로별 기본값을 따릅니다.
Stage 1 컴파일러 프리뷰 실행하기
설치된 아티팩트는 명시적인 Stage 1 Compiler Preview 기능도 제공합니다.
topaz compiler preview main.tpz --producer stage1 --terminal rust-source --out-dir stage1-observation
topaz compiler validate stage1-observationStage 1 Preview는 토파즈로 작성된 로어러와 Rust 생성기의 결과를 받아
처리합니다. 출력 결과는 버전이 명시된 교환 포맷 및 소스가 배제된 비공개 IR 형태입니다.
Preview는 이 데이터만으로 일반 패키지를 컴파일합니다. 이때 타깃 Rust 파서, 리졸버,
검사기, 로어러, 생성기, 인터프리터를 링크하지 않으며, 작업 실패 시 이들을
재호출하지도 않습니다. 관리형 번들에는 생성·결과 단계 1/1, 컴파일러 소스
집합, 생성 소스, 런타임 템플릿 식별자, targetCompilerFallback: false가
기록됩니다.
regenerate_stage1_c1 릴리스 도구는 CLI 인수를 한 번만 파싱해 타입화된
프로듀서 모드와 소유 경로로 변환합니다. --producer가 없을 때만 interpreted를
기본값으로 사용하고 linked-c1에는 입력 매니페스트를 요구하며 미사용 매니페스트·
값 누락·중복·미인식 옵션을 생성 전에 거절합니다. Rust 1.96 릴리스 관측은
Stage 0→1에서 null 입력 SHA를 가진 98,301,332바이트를 1,343.36초에,
Stage 1→2에서 정확한 입력 매니페스트·프로그램 이미지 SHA와
targetCompilerFallback: false를 가진 98,289,249바이트를 2,122.96초에 기록했습니다.
generate_stage2_r2 릴리스 도구는 이제 regenerate_stage1_c1과 generator CLI 옵션·SHA-256·atomic-write 소유권을 공유합니다. 필수 R2 경로 3개를 한 번의 타입화된 패스로 소비하고 값 누락·중복·미인식 옵션을 생성 전에 거절합니다. Rust 1.96 --release --locked 관측 한 번은 정확한 입력 C2 매니페스트·프로그램 이미지 SHA, targetCompilerFallback: false, 기존 linked C2 product와 같은 생성 Rust 바이트·SHA를 가진 98,289,249바이트를 2,087.51초에 기록했습니다.
퇴역한 run_stage1_c1_canary workspace binary는 live script·CI·explicit Cargo target consumer가 없었고 private 64-round fact loop, formatting-sensitive JSON provenance 검사, response parsing과 SHA 출력을 중복했다. 이 binary는 제거했으며 공식 C1 generation과 comparison은 shared typed product 경로를 소비하는 regenerate_stage1_c1과 check_stage1_comparison을 계속 사용한다.
Live stage2_fixed_point_case 검증 진입점은 이제 OS-native input path 정확히 하나만 허용하고 missing·extra input을 source 처리 전에 거절합니다. Host는 canonical source를 빌리고 request에 답할 때만 owned source fact를 만들며, 독립 C1/C2 front-end agreement와 output record는 그대로 유지합니다.
Stage 1 runtime build는 이제 operand·label·module-operation 배열을 borrowed exact-size iterator로 읽어 직접 직렬화하며, 길이 확인에만 쓰던 임시 vector 세 종류를 만들지 않습니다. Compact image byte와 C1/C2 identity가 관측 제품 경계로 유지되며, 이는 build-time ownership 변경이지 runtime performance 주장이 아닙니다.
Stage 1 runtime manifest admission, C1 manifest producer와 설치된 C2 identity admission은 이제 정확한 Rust toolchain 값을 세 별도 리터럴이 아니라 Cargo package metadata에서 유도합니다. 두 package는 workspace rust-version을 상속하며 봉인 manifest의 값과 byte는 바뀌지 않았습니다. 이는 build-time metadata ownership 변경이지 toolchain upgrade·support expansion이나 일반적인 reproducibility 주장이 아닙니다.
Stage 1 runtime build는 이제 사전 계산한 불변 C1/C2 program-image SHA-256 identity를 embedded compiler descriptor로 전달합니다. Public image-identity helper와 product-manifest descriptor는 전체 image를 다시 hash하거나 접두 descriptor String을 할당하지 않고 그 static value를 빌리며, 독립 C2 runtime admission hash는 실행 전 corruption과 expected identity drift를 계속 거절합니다.
파이프라인 placeholder plan은 이제 모든 실행 가능한 단계 인자 표현식 형태를 탐색하면서 각 중첩 파이프라인 RHS를 해당 중첩 단계에 귀속합니다. Placeholder가 없는 단계는 inserted-lead를 사용하고, placeholder가 있는 단계는 작성된 인자 목록을 유지한 채 _에 바인딩한 pipe-lead를 한 번 평가해 Stage 0·self-host lowering·Stage 1 제품 런타임·생성 Rust·생성 Python 전반의 인자 형태·소스 순서·closure capture·중첩 단계 격리를 보존합니다. 이는 기존 SPEC §11 동작의 제품 결함 수정이며 schema ID를 바꾸지 않는 internal call-evaluation vocabulary 확장입니다.
점·안전 점 연산자 뒤와 명시적 record-field colon 앞의 keyword field role은 더 이상 let·const·case·for·concurrent construct state를 열지 않습니다. Stage 0와 live self-host layout source는 실제 construct head와 기존 keyword field name 21개를 유지하면서 후속 multi-statement block과 nested record-pattern brace를 보존합니다.
Python differential harness는 temporary String 재대여 두 곳을 제거하고 중첩 조건 한 곳과 single-arm match 한 곳을 단순화해 별도 Rust 1.96 strict-clippy workspace를 통과합니다. Product compiler·runtime, self-host 토파즈 source와 기존 test 동작은 변경하지 않았습니다.
Rust Stage 0와 현재 live self-host parser source는 이제 기존 TPZ2012 바인딩 이름 규칙을 const 선언에도 적용하므로 const None: Option<int> = None을 None 이름에서 거절합니다. Sealed embedded self-compiler image는 변경하지 않았으며 후보 재생성 전까지 historical 상태로 유지됩니다.
Stage 0 Rust와 live self-host 토파즈 파서는 선택 import 목록의 모든 쌍을 비교하던 방식을 단일 소스 순서 순회로 전환하고, 이미 확인된 exported-source 이름과 bound-local 이름을 추적하도록 정리했습니다. 이를 통해 중복을 유발한 후행 spec마다 소스 토큰 순서대로 정확히 하나의 TPZ2011 진단을 방출하고 두 축이 모두 겹칠 때의 exported-source 우선순위를 유지하며, 기존 진단 코드·메시지·토큰 span을 유지하고 봉인된 임베디드 C2 이미지는 재생성하지 않습니다.
topaz_parser 크레이트는 외부 소비자가 없던 parse_layout_tokens 함수를 비공개로 전환하고, 디버그 표현을 자기 자신과 비교하던 자체 비교 전용 테스트를 제거했습니다. parse_staged와 네 개 stage 레코드는 resolver 및 kernel 관측 경로가 소비하는 공용 제품 경계로 온전히 유지됩니다. 제품 파싱, AST 구조, 진단, self-host 소스 및 언어 동작은 변경되지 않았습니다.
Stage 0 Rust와 live self-host 토파즈 resolver·checker는 이제 기존 initializer immediate/delayed 경계를 조건부 표현식 자식에도 적용합니다. &&, ||, ??의 왼쪽 operand와 optional call receiver는 최상위 전방 참조 검사에 남지만, 단락 평가 오른쪽 operand와 optional call argument는 runtime 평가가 건너뛸 수 있으므로 지연 위치입니다. 참조 binding이 준비되기 전에 실제로 그 위치에 도달하면 기존 dynamic unbound fault가 그대로 발생합니다. SPEC §17과 ADR-086도 두 계열을 명시합니다. 이는 정적 과잉 거절 수정이며 새 언어 기능이나 runtime 안전 보장이 아닙니다.
topaz_resolve 크레이트와 FileProvider 인터페이스는 이제 읽을 수 없는 파일과 유효하지 않은 UTF-8 입력을 TPZ3001 모듈 부재로 오분류하던 기존 Option<String> 축약 대신 typed SourceRead 경계(Present, Missing, Unreadable, InvalidUtf8)를 사용합니다. 모듈 해석과 kernel host-fact 재생은 읽기 불가·비-UTF-8 입력에 기존 TPZ3003 source-loader admission 진단을 방출하며 physical read 분류 권위를 resolver로 단일화했습니다. 진단 코드, schema, AST 구조, self-host source 및 공개 release 상태는 변경되지 않았습니다.
Parser corpus test와 저장소 전용 CLI check-corpus 명령은 이제 고정된 5.1 cardinality와 6개 영역 5.2 표를 corpus-extract 단일 권위에서 직접 소비합니다. 중복 5.2 area-list assertion을 제거했고 phase 주석은 현재 parse·resolve·check·exec 소유 구조를 설명합니다. Fixture byte, 제품 언어 동작과 공개 release 상태는 변경하지 않았습니다.
비교 경계 파악하기
비교 경계는 의미론적 관찰, 진단 정보, 생성 소스, 생성 아티팩트의 동작, 출처 정보를 각각 독립적으로
검증합니다. 명시된 다중 모듈 사례 및 검사 거부 사례에서 Rust Stage 0와 Stage 1
Preview의 실행 결과가 일치합니다. 명시된 비교 제품에서 링크 방식과 인터프리터 방식의
Stage 1 경로는 동일한 Rust 소스를 생성하고, Stage 0와 Stage 1이 생성한 Rust 소스는
서로 다릅니다. 컴파일한 Stage 1 제품은 정확히 42를 출력합니다. 잘못된 생성자
식별자나 손상된 관리형 Stage 1 아티팩트는 타깃을 Stage 0로 재시도하지 않고 거부됩니다.
저장소 복제 없이 비교하기
설치된 아티팩트만으로 저장소를 클론하지 않고 정확한 비교 검증을 수행할 수 있습니다.
topaz compiler observe main.tpz --terminal rust-source --out-dir rust-observation
topaz compiler preview main.tpz --producer stage1 --terminal rust-source --out-dir stage1-observation
topaz compiler validate rust-observation
topaz compiler validate stage1-observation
topaz compiler compare --layer semantic rust-observation stage1-observation두 개의 관리형 관측 번들을 생성한 이후에는 검사 및 비교 과정에서 원본 타깃 소스를 다시 읽지
않습니다. Stage 1 작업이 요청을 거부하거나 오류로 중단되는 경우 그대로 실패하며, 다른 관측
번들로 대체하지 않습니다. 이 경우 별도의 compiler observe 복구 명령을 안내할 뿐
자동으로 실행하지는 않습니다. Rust Stage 0 구동이 필요한 경우 일반 check 또는 빌드
명령 수행 시 --compiler rust 옵션을 직접 지정하세요.
생성된 Rust 출처 분리하기
컴파일러가 생성한 Rust 코드는 생성자 및 빌드 출처 정보를 캐노니컬 소스 바이트 외부에 기록합니다. 이처럼 출처 데이터를 분리함으로써 식별 정보를 유지한 채 이후 컴파일러 단계에서 생성 소스를 바이트 단위로 비교할 수 있습니다. 설치형 Stage 1 명령은 명시적인 생성자 Preview 기능이며 일반 경로의 기본값과 분리되어 구동됩니다.
생성된 컴파일러 소스 검증하기
공개된 Rust Stage 0 구현으로 검증기가 토파즈 컴파일러 소스 파일 14개를 컴파일하면, 체크인된 생성 Rust 소스가 바이트 단위로 동일하게 재생성됩니다. 이 경로에서 체크인된 생성 소스는 오직 마지막 비교 대상으로만 쓰입니다.
이와 별도로, 검증기는 체크인된 생성 Rust 소스에 인코딩된 컴파일러 프로그램 이미지를 추출해 공개 런타임으로 실행합니다. 같은 컴파일러 소스 14개에 대해 그 이미지는 같은 생성 Rust 바이트를 다시 만들어 냅니다. 이미지가 체크인된 출력물에서 파생되므로, 이 검사는 왕복 자기일관성 검사이지 독립적인 부트스트랩이나 Stage 2 고정점 검사가 아닙니다.
공개 검증기는 현재 선언된 rust_build(R1) 단계에 따라 R1 에서 새 컴파일러
아티팩트를 빌드하고 그것을 실행해 R2 를 만드는 일을 수행하지 않습니다.
따라서 우리는 Stage 2 고정점을 주장하지 않습니다.
비교 경계 선택하기
두 개의 완전한 관찰 번들을 비교할 때는 검증하고자 하는 목적에 맞는 계층 경계를 선택하세요.
topaz compiler compare --layer semantic observation-a observation-b
topaz compiler compare --layer generated-source observation-a observation-b
topaz compiler compare --layer provenance observation-a observation-b
topaz compiler compare --layer native-binary program-a program-b해당 명령은 규격화된 크기의 단일 JSON 레코드를 출력합니다. 선택한 계층의 정보가 서로 다르면 오류 상태로 종료됩니다. 의미론적 비교는 처음으로 불일치가 발생한 컴파일러 단계에서 구동을 중단합니다. 생성 소스와 출처 정보는 상호 독립적이므로, 생성자 식별자가 변경되었다고 해서 언어의 의미론적 명세가 어긋난 것은 아닙니다.
Rust Stage 0 기준점 복구
셀프호스팅 자격을 갖춘 릴리스에는 일반 플랫폼 바이너리 5개와 함께 복구 매니페스트 및 결정론적 소스 아카이브가 별도로 포함됩니다. 이 아카이브는 Rust 컴파일러 소스, 잠금 파일, 벤더 의존성 패키지 및 라이선스, 런타임 템플릿, 프로토콜 스키마, 컴파일러 워크로드, 재구성 도구를 고정된 상태로 보관합니다. 내장된 토파즈 구현 컴파일러 파일 역시 독립적으로 검증 가능한 단일 소스 집합으로 기록됩니다. 동일한 입력값으로 아카이브를 재생성하면 바이너리 바이트 단위까지 일치합니다.
복구 세트에는 Rust 툴체인 자체가 포함되어 있지 않습니다. 고정된 Rust 툴체인을 먼저 설치해야 합니다. 그다음부터는 아카이브 내부의 벤더 디렉터리만 활용하여 오프라인 환경에서 빌드를 진행할 수 있습니다. 이 경로는 복구 작업 및 출처 검증을 별도로 수행하기 위해 마련된 것입니다. 일반적인 설치 경로가 아니며 Rust 복구 체인이 셀프호스팅됨을 의미하지는 않습니다.
부트스트랩에 적합한 컴파일러 소스 검사
Bootstrap Profile은 컴파일러 커널 소스가 사용할 수 있는 언어적 구문 범위를 머신이 읽을 수 있는 형태로 제한합니다. 새로운 문법이나 다이얼렉트를 추가하지는 않습니다. 잠긴 결정론적 패키지는 외부 호스트 권한, extern 모듈, 부동소수점 연산, 동시성, 리소스 관리, 테스트 API 및 기타 호스트 의존적 연산을 사용하지 않는 조건에서만 검증을 통과합니다.
topaz check --profile bootstrap --locked --root compiler-kernel사용자가 확인하는 진단에는 식별 가능한 bootstrap/* 규칙 명이 표시됩니다.
--format json 옵션을 지정하면 stderr로 머신 가독형 프로필 진단 정보가, stdout으로
요약 정보가 각각 출력됩니다. 식별자 해석은 사용자 정의 print 함수를 로컬 값으로 분류합니다.
금지된 호스트 연산은 이름을 바꾸거나 별칭을 붙여도 호스트 식별자를 유지합니다.
선택에 필요한 제한
모든 타깃은 파싱, 모듈 해석, 정적 검사 단계를 공유합니다. 그러나 호스트에 의존하는 연산을 모든 타깃에서 지원하는 것은 아닙니다. 특정 연산을 동일하게 유지할 수 없는 타깃은 아티팩트를 생성하기 전에 해당 연산을 거부해야 합니다. 특히 생성된 Python 코드는 현재 fixed-Huffman DEFLATE, 고정 zlib, RS(255,223) 헬퍼를 지원하지 않습니다. 이 경우 코드 생성 단계에서 중단되며 오류가 발생합니다. 바이너리 미디어를 처리할 때는 타깃을 선택하기 전에 백엔드 문서를 확인하세요.
HTTP 제품은 고정된 리스너, 요청, 대기열, 타임아웃, 로그, 종료 제어를 갖춘 관리형 HTTP/1.1을 구현합니다. TLS, HTTP/2, WebSocket, 아웃바운드 네트워크 액세스, 주변 환경 권한, 공유 가변 토파즈 상태, 범용 Web 프레임워크는 이 제품의 구성 요소가 아닙니다.
Web 애플리케이션 호스트는 선언된 브라우저 권한을 사용합니다. Raw Web과 Worker 아티팩트는 기존 JavaScript 호스트가 필요합니다. 브라우저 플레이그라운드는 소스를 실행하며, 배포 동작은 생성 제품을 소스 작업 공간 밖에서 실행해 확인합니다.
동시 실행 작업의 수행 순서는 지정되어 있지 않습니다. 순서가 있는 출력은 작업을 합류한 뒤 생성하세요.
설치 평가기는 topaz lispex embed를 처리하며, 토파즈 타깃 선택은 별도 표면입니다.
--target lispex는 산출물 출력 전에 거부됩니다. LIT는 하나의 소스 계보에서 실행되는
리스펙스 테스트·통합 표면으로, 설치 평가기와 출력 백엔드와 구분됩니다.
권장 작업 순서
fmt --check, check, test 순으로 검사를 시작하세요. 명령형 애플리케이션은 run으로,
Web 애플리케이션 또는 HTTP 서비스는 dev 명령으로 확인하세요. 실제 배포 타깃만
빌드하고, 배포 시에는 관리 타깃 디렉터리 전체를 복사하세요.