규칙 6.1
6장, 선언과 리소스 테스트
A resource must be written declare const x: uniform<T>, declare const x: storage<T>, declare const x: storage<T, "read_write">, or declare const x: <texture or sampler type>.
It must have no initializer, and its binding slot is the source order of declare in the file.
A resource is never declared with let: declare let x: storage<T> and declare let x: uniform<T> are both refused, and each refusal names the declare const form of the line it is on.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
declare is TypeScript’s own word for a value that exists elsewhere, which is what a host-owned resource is, and const is the only keyword that says anything true about one, since nothing rebinds the name.
출처
Variable and Value Declarations, Address Spaces, Shader Interface; surface §1, §7 and §15.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
TS8099for adeclarewith a plain type (declare "x" must be uniform<T>, storage<T>, a texture, a sampler or override<T>.);TS8099fordeclare let x: storage<T>and fordeclare let x: uniform<T>, raised insrc/compiler/ts/bindings.tswhere the declaration’s keyword is already read, each sentence naming thedeclare constline to write instead;TS8033for a resource type withoutdeclare, whose sentence names thedeclare constform and, on astoragewith no access mode of its own, the mode the KEYWORD asked for (let dst: storage<array<f32>>namesdeclare const dst: storage<array<f32>, "read_write">, the same reading of the same keywordbindings.tsmakes); a resource with no type argument names the shapestorage<...>, since the type is one only the author knows;examples/binding-declared.test.tsfor the slot order.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8033MODULE_VAR - A module variable (
let x: workgroup<T>,let y: T = init, §24) declared or used where its address space forbids: aconstwith an address-space wrapper, aworkgroupvariable with an initializer, a type the space cannot hold (a texture, a runtime-sized array, an atomic in a per-invocation variable), an initializer that is not a constant, or aworkgroupvariable reached from a vertex or fragment entry (roadmap 0.2 item 5). -
TS8099UNSUPPORTED UNSUPPORTED(TS8099) is the one deliberate exception to "sequential": it is the catch-all for a diagnostic whose site does not yet deserve its own code, so it stays parked past the sequential range instead of at its head.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:384(설계 문서)reqs/rules/RULE-0601.md(추적 항목)