aboutsummaryrefslogtreecommitdiffstats
path: root/docs/design/005-field-connections.md
blob: 0993567f9b7df496b34942923b773f5ca10e29e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 필드와 실제 입력 값으로 정하는 연결

2026-09-23 착수 기준:

- 바꿀 결정: 작성자가 바이트 위치를 직접 관리하지 않고 필드의 배치·접근과 데이터에 따른 범위를 준비한다.
- 남은 질문: 이름·타입을 붙인 뒤에도 입력을 객체로 재구성하지 않고 실제 요청 값으로 저장·응답을 선택할 수 있는가?
- 최소 확인: 문서와 선택 시작·길이를 받는 실제 요청에서 선택한 내용을 저장·응답한다. 잘린 입력·잘못된 범위는 저장 전에 거절한다.
- 중단 기준: 이 경로가 검증되면 새 범용 직렬화 형식·타입 VM·동적 그래프 실행기로 범위를 늘리지 않는다.

`layout`은 경계의 바이트 배치 선언이다. 저장소 스키마나 Pure 전체의 RAM 객체 모델이 아니다.
첫 필드 종류는 `u32le`, 고정 `bytes[N]`, 마지막 가변 길이 `bytes`다. 패딩 없이 선언 순서로
배치하며 숫자는 명시한 바이트 순서로 읽는다. 기존 바이트 경로에는 선언을 강제하지 않는다.

`view(Layout, source)`는 복사·할당 없이 타입이 있는 참조를 준비한다. 필드는 이름으로 선택한다.
고정 필드는 지정한 폭을 요구하며 마지막 bytes는 나머지 구간이다. 고정 필드만 있는 선언은
접두부를 해석하고 여분의 바이트를 무시한다. 필드 의미·텍스트 인코딩·버전 변환까지 보장하지 않는다.

`range`는 상수 또는 `u32le` 필드를 시작·길이로 사용한다. 상수만 필요한 연결은 기존처럼
준비 단계에서 합친다. 실제 입력 값에 의존하는 범위만 요청 시 계산하며, 별칭은 실행 단계를
추가하지 않는다. 쓰지 않는 동적 범위도 검사해 오류를 보존한다. 모든 검사가 저장 효과보다 앞선다.

첫 동적 범위는 PUT 입력에 한정한다. GET의 이름 기반 고정 필드·나머지 구간 선택은 가능하나
파일 내용의 숫자로 결정하는 동적 GET은 시작 시 거절한다. 후자는 같은 파일 버전에서 필요한
숫자와 본문을 읽는 접근 계획이 추가로 필요하며, 전체 매핑으로 조용히 대체하지 않는다.

배치 선언은 최대 4개, 선언당 필드는 16개, 입력 값에 의존하는 범위는 8단계로 제한한다.
가변 필드 뒤의 필드·중첩 배치·동적으로 선택한 바이트 위의 새 배치 해석은 아직 지원하지 않는다.
소비 완료까지 원본의 수명을 유지하며 입력의 일부만 선택해도 수신 할당 전체를 계상한다.