규칙 6.1
이 페이지에서

규칙 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.

출처

검증 방식

테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.

컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.

  • TS8099 for a declare with a plain type (declare "x" must be uniform<T>, storage<T>, a texture, a sampler or override<T>.);
  • TS8099 for declare let x: storage<T> and for declare let x: uniform<T>, raised in src/compiler/ts/bindings.ts where the declaration’s keyword is already read, each sentence naming the declare const line to write instead;
  • TS8033 for a resource type without declare, whose sentence names the declare const form and, on a storage with no access mode of its own, the mode the KEYWORD asked for (let dst: storage<array<f32>> names declare const dst: storage<array<f32>, "read_write">, the same reading of the same keyword bindings.ts makes); a resource with no type argument names the shape storage<...>, since the type is one only the author knows;
  • examples/binding-declared.test.ts for the slot order.

커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.

설명하는 절

커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.

적용하는 오류 코드

규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.

TS8033 MODULE_VAR
A module variable (let x: workgroup<T>, let y: T = init, §24) declared or used where its address space forbids: a const with an address-space wrapper, a workgroup variable 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 a workgroup variable reached from a vertex or fragment entry (roadmap 0.2 item 5).
TS8099 UNSUPPORTED
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의 규칙 원문:

이 페이지 편집 문제 보고