콘텐츠로 이동

Quad

가상 DOM 없이 실제 Instance를 바로 만들고, 바뀐 프로퍼티 하나에만 도달하는 Roblox UI 렌더러

현재 릴리즈 v3.1.0 — pesdeqwreey/quad_base(백엔드 quad_roblox와 타입 quad_types도 같은 버전으로 함께 게시됩니다) ·변경 이력
이 문서는 개발 중 코드를 기준으로 씁니다 — 게시된 릴리즈에 아직 없는 것은 변경 이력의 Unreleased 절에 있습니다.

DOMless 즉시 생성

가상 DOM 트리 비교나 VNode 할당 없이, Luau 인라인 테이블 평가 시점에 즉시 실제 Roblox Instance를 만들어 돌려줍니다. 변화는 중간 트리를 거치지 않고 개별 프로퍼티 바인드에만 도달합니다.

신호는 push, 계산은 pull

:Set은 “바뀌었다”만 알리고, 계산은 :Get() 시점에 노드 캐시에서 한 번 일어납니다. 신호가 몇 갈래로 도착하든 계산은 한 번이라 다이아몬드 그래프의 중복 재평가가 구조적으로 없고, 아직 살아나지 않은 관측은 보류됐다가 최신값으로 한 번만 재생됩니다.

원소를 재활용하는 키 기반 목록

Slot:List는 키마다 지난번 원소를 prev로 돌려주고, 그대로 반환하면 파괴도 재마운트도 없습니다. Roblox에서 형제 순서는 부기값이라 물리 재배치가 없고, LayoutOrder는 넘겨받은 index/offset으로 직접 바인딩합니다.

규칙 둘뿐인 Modifier

재사용 스타일은 디스패치 전에 정적으로 펼쳐지는 불변 값이라 런타임 캐스케이드 계산이 없습니다. 규칙은 둘 — 인라인 해시 키가 항상 이기고, 숫자 키 자리의 뒤쪽 Modifier가 앞쪽을 이깁니다. 여럿을 하나로 합칠 때는 Overridden(뒤 인자가 이김)으로 합성합니다.

부착식 백엔드, 사용자가 정하는 어휘

코어는 엔진 op를 주입받는 순수 모듈이고 백엔드는 UseProvider 한 줄로 부착됩니다 — Roblox 백엔드와 헤드리스 mock이 같은 문으로 들어옵니다. Frame { … } 안에 올 수 있는 값과 키는 핸들러 레코드 하나를 등록하면 늘어나고, 우선순위 축은 열린 숫자 공간입니다.

Studio 템플릿 Claim

디자이너가 제작한 Studio UI 템플릿을 Clone()Claim()으로 넘겨받아, 코드로 만든 트리와 같은 반응성을 붙입니다. 템플릿은 정적 프로퍼티만 심어 D로 만들어도 됩니다 — 원소가 많을 때는 하나하나 짓는 것보다 엔진의 네이티브 Clone()으로 사본을 뜨는 쪽이 싸고, 바뀌는 값만 Claim의 디스크립터에 심습니다.