v107 — 동적 배열 단일화
상태: 구현 완료
고정 길이 배열 kind를 형식에서 제거하고, 모든 배열이 로우마다 자기 길이를 싣도록 한 개정입니다. 디스크립터의 원소 개수 필드도 함께 사라집니다.
핵심은 한 줄입니다. 길이가 파일에 한 번만 적히면 그 길이는 생성 코드에 굳고, 그러면 컬럼을 하나 더하는 것이 데이터 패치가 아니라 코드 배포가 됩니다.
1. 문제 — 상수로 굳는 길이
v106까지 배열 kind가 둘이었습니다.
| kind | 길이가 어디에 |
|---|---|
KindFixedArray = 1 | 디스크립터에 한 번. 모든 로우가 같은 길이 |
KindVarArray = 2 | 로우마다 counter32 하나 |
고정 쪽이 생성 코드에 남긴 것이 상수입니다. C#이라면 이렇게 나왔고, 모든 언어가 같은 것을 냈습니다.
internal const int Slot_N = 2;
…
for (int j = 0; j < Record.Slot_N; ++j) // 읽기 루프가 그 상수를 돕니다
배포된 리더는 자기가 아는 개수까지만 읽습니다. 시트에 Slot3을 더하면 파일에는 원소가
셋 실리지만, 이미 나가 있는 클라이언트는 둘만 읽고 셋째를 조용히 버립니다. 이 도구가
매니페스트와 데이터 패치 업데이터를 갖추고 「데이터만 배포할지 코드까지 배포할지」를
판정하는 것과 어긋나는 자리이고, 와이어 태그가 존재하는
이유와 같은 종류의 문제입니다 — 이름이든 개수든 코드에 굳어 있으면 데이터만으로 바꿀 수
없습니다.