본문으로 건너뛰기

주 시트 레이아웃 — 설계

문서 목록으로

Tabbit의 주 작성 레이아웃의 설계입니다. STRUCT DSL이 들어오면서 기존 tabbit 레이아웃(~~table:Name~~ 마커, 위치 고정 5행)으로는 임베딩 오브젝트 · 멀티 로우 · 예약 컬럼을 표현할 자리가 없어, Luban의 시트 구조를 조사해 그 검증된 부분을 차용하고 취약한 부분을 보강한 새 레이아웃을 정의합니다.

Luban을 그대로 복제하지 않습니다. 기능 단위로 채택 · 변형 · 미채택을 판정하였고(§10), 시트 작성자가 더 직관적으로 쓸 수 있는 형태가 있으면 그쪽을 택했습니다. 조사의 근거는 Luban 레이아웃 레퍼런스(문서 · 소스 교차 검증, 커밋 8f7f4e1)와 Luban 기능 대조입니다.

행 키 레이아웃을 대체합니다. 그 설계의 분석 — 마커 열, 경계 규칙, 메모 컬럼, 수식 오류 보고의 지연, 정렬 사고 검출 — 은 이 문서가 계승하고, 표기만 : 키로 다시 정의합니다. 레이아웃 id는 tabbit입니다 — 기존 tabbit 레이아웃은 폐기가 결정되었고, 이 레이아웃이 완성되면 그 id를 승계합니다(§16의 6).


1. 목표

목표귀결
STRUCT DSL의 시트 결합을 온전히 표현(나) 타입 이름 그룹 · (다) sep 한 셀 · 멀티 로우(§6) · 예약 컬럼(§7)
시트 작성자의 직관특수문자 어휘 2종(§2) · 자리 하나에 뜻 하나 · 드롭다운 가능성 유지
Luban에서 관찰한 취약 사례의 재발 방지§11의 점검표. 하나하나에 이 설계의 대응을 적었습니다
표현의 자유메모 · 작업용 컬럼 · 수식을 시트 어디에나. 마커 열이 경계를 정하므로 침범 규칙이 필요 없습니다
기존 데이터 칸 규칙의 완전 계승바뀌는 것은 헤더뿐입니다. 셀에 적는 값의 규칙은 전부 무변경입니다(§9)

2. 표기 어휘 — 특수문자 2종

레이아웃이 새로 정의하는 특수문자는 :# 둘뿐입니다.

기호나오는 자리
:행 키와 선언 — 데이터가 아니라 구조선언 :table Item(…) · 행 키 :field :type :desc :target :variant
#모델에 넣지 않음마커 열의 행 제외 · :field의 메모 컬럼(# 단독) · #이름@N Tombstone · 워크북 · 시트 이름의 제외(기존)

Luban은 ## · * · ! · $ · [이름…이름] · #속성의 6가지 표기 계열을 씁니다. 이 설계는 그 전부를 위 3종과 기존 어휘로 접습니다 — $type자리를 옮겨 예약 컬럼으로, *(멀티 로우)는 이름의 []로, !(빈 칸 금지)는 옵셔널의 반대인 기본값 필수 규칙으로.

기존 어휘는 그대로 계승합니다. 새로 배울 것이 아니므로 개수에 넣지 않습니다.

기호근거 문서
?옵셔널. int? · int[]? · int?[]옵셔널 · 원소 옵셔널
[] (타입 칸)셀 안의 배열. int[]시트 작성
[n] · [] (이름)원소 번호 · 멀티 로우(§5 · §6)이 문서
.레코드 멤버중첩 필드
@N와이어 태그시트 작성
*보조 인덱스시트 작성
$예약 컬럼 — $type(다형 레코드의 변종) · $key · $value다형과 참조 배열 §5.2
|되돌렸습니다. foreign Weapon|Armour는 거부되고, 여러 테이블 중 하나여도 되는 값은 괄호 메타 refs=Weapon;Armour의 검사입니다참조가 내는 이름 §6
- · \-값 없음 · 문자 -빈 칸과 없음

$를 도입합니다 — 예약 컬럼이 $type · $key · $value입니다(§7). 처음에는 이 셋을 : 접두로 받아 「:가 붙은 것은 데이터가 아니라 레이아웃의 낱말」 하나로 끝내려 했고, 2026-08-25에 되돌렸습니다.

되돌린 이유
:type이 이미 헤더 행 키입니다. 같은 낱말이 「:type 」과 「:type 컬럼」 둘을 뜻하게 됩니다 — 역할이 아예 다른 두 자리에 한 이름입니다
경로 마디에서 식별자 검사가 막습니다. effect.:type은 「:Type은 유효한 식별자가 아니다」로 거부되고, 살리려면 예외가 필요합니다. 그 예외는 기호를 무엇으로 바꾸어도 똑같이 필요합니다 — 그 대가를 치를 것이면 겹치지 않는 기호를 쓰는 편이 낫습니다

그래서 기호는 셋입니다 — :는 행 키(:table · :field · :type · :variant), $는 예약 컬럼($type · $key · $value), #은 제외와 주석입니다. 자리가 갈리므로 겹쳐 보이지 않습니다.

주의 — *의 뜻이 Luban과 다릅니다. Luban의 *이름은 멀티 로우이고, 이 레이아웃의 *이름은 보조 인덱스(기존 tabbit 어휘)입니다. Luban에서 오는 사용자가 걸리는 지점이므로 사용자 문서에 명시하고, 멀티 로우 자리에 적힌 *[]를 안내하며 미채택합니다.


이 문서의 나머지

무엇어디
3. 시트의 구조선언 셀 · 마커 열 · 경계 · 헤더 행 — 레이아웃의 뼈대
헤더 행과 컬럼 경로:type 의 접힌 표현 · :field 의 경로 · 멀티 로우 · 예약 컬럼
엔티티별 레이아웃테이블 · enum · 상수셋이 각각 어떻게 놓이는지
대조와 점검다른 도구와의 대조, 취약 사례, 헷갈리는 지점, 남은 결정
구현코어가 바뀌는 범위 · 게이트 · 단계별 구현 순서