규칙 8.23
8장, 함수와 진입점 테스트
A kernel function’s parameter of an array with no size is the caller’s storage, passed by reference: the body reads and writes its elements in place, reads its .length, and cannot assign it whole; whether the body writes it decides its access.
A kernel function is emitted by no target, since it runs on the host’s side of the call; an array<T, N> parameter stays by value.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
render(k, 512, img) fills img, which is TypeScript’s own meaning of a typed-array argument, and a runtime-sized array exists only in storage (Rule 12.6), so a copy has no meaning.
출처
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
parseParams and fillFunctionBody in src/compiler/ts/lower/function.ts, which take the parameter as an inout storage array for a kernel function and refuse it on any other (TS8020); withoutKernels in src/core/ir/kernels.ts, which every backend and reflect() read through; pinned by src/compiler/ts/kernel-loops.test.ts, which runs a kernel function on the CPU oracle and holds the caller’s array written in place.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8020FUNCTION_SHAPE - A function declaration or parameter shape TypeShade does not support (missing name or body, optional/rest/destructured parameter).
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:884(설계 문서)reqs/rules/RULE-0823.md(추적 항목)