Changelog (변경 이력)
Version 3.0.0
BREAKING — 처음부터 다시 쓴 별개 라이브러리입니다. 3.x는 quad v1과 API 호환이 없고, 패키지 이름과 설치 경로도 다릅니다. 아래 목록은 v1의 마지막 릴리즈인 2.24를 기준으로 무엇이 생기고, 바뀌고, 없어졌는지입니다. 옮기는 절차는 quad v1에서 v2로 옮기기, 없앤 이유는 quad v1에서 오는 분께에 있습니다. v1은 master 브랜치와 GitHub 릴리즈(rbxmx)에 그대로 남습니다.
Added
- 패키지 다섯 —
qwreey/quad_base(엔진에 묶이지 않은 코어),qwreey/quad_roblox(Roblox 백엔드),qwreey/quad_types(구현 없는 공개 타입 계약),qwreey/quad_error(호출한 줄을 가리키는 에러 유틸),qwreey/type_version_check(버전 패턴을 타입 수준과 런타임에서 검사하는 유틸). - 모듈 —
require가 돌려주는 기본 인스턴스, 격리된 인스턴스를 만드는Quad.New(), 백엔드를 설치하는q:UseProvider(),q:AddPlugin(),q:RunInit(),q.Version,q.debug, 약한 관계 테이블을 만드는q.Relate(). - 반응형 코어 —
q.Source(:Set/:Emit),State(:Get/:Compute/:With/:Apply/:Gate/:Observer), 필드로Source를 선언하는q.Store(:Of/:Names). - 구독 핸들 —
Observer와q.Effect. 강한 구독과 약한 구독(:Subscribe/:WeakSubscribe/:Unsubscribe/:WeakUnsubscribe),effect:Rerun(). - 전파 게이트 —
q.Blocker(:On/:Off/:OffWithoutEmit/:Policy). q.Slot— 자식 목록을 소유하는 값. 편집(:Add/:Remove/:Replace/:Extract/:ExtractAll/:Splice/:Clear/:Move/:Swap/:Get/:IndexOf)과 데이터 바인딩(키로 인스턴스를 재활용하는:List, 값 하나를 따르는:Single).q.Ref/q.PreRef/q.PostRef— 인스턴스 참조를 그 자리에서 받는 값(:Set/:Callback/:WeakCallback/:Uncallback/:Wait/:Unwrap).q.Modifier— props의 숫자 키 자리에 놓는 불변 스타일 값(:Apply/:Overridden/:As/:Peek,q.Modifier.TypedFactory/DefineSubtype). Roblox 클래스별로D.Modifier.<Class>.q.Tag와q.Attr— 태그와 어트리뷰트를 선언적으로 붙이는 값(q.Tag.Merged,q.AttrKey,q.StringAttr/NumberAttr/BooleanAttr,q.Attr.Merged/Overridden).- 센티널과 수명 도구 —
q.None/q.Detach/q.KeyGone/q.Void,q.dispose(),q.bindLifetime()/q.unbindLifetime(), 값의 종류를 판별하는q.is*술어. - 슈거 —
q.Context(q.Context.Provider),q.Operator(Not/Sum/Product/Min/Max/Clamp/비트 연산/Alternative/Index),q.Debounce/q.Throttle, 생명주기 훅q.OnCreated/q.OnRendered/q.OnDestroyed, 에러 격리q.Fallback/q.Traceback. - Roblox 백엔드 — 클래스마다 프로퍼티 타입이 붙은
D.<Class>와D.New(), 프로퍼티 변화를 받는q.OnChange(name, fn). - 선언형 애니메이션 — 프로퍼티 자리에 값으로 놓는
q.Tween{}(:Mapped)과,state:Apply(q.Animate{...})로 상태에 붙이는q.Animate{}. 겹칠 때의 처리는Override = "Cancel" | "Finish". q.Claim(inst, D.Mapper.<Class>(...))— Studio에서 만든 기존 트리를 quad 소유로 넘겨받습니다(인스턴스당 한 번).- 확장 계약 — 백엔드 프로바이더 규약,
q.Dispatch(핸들러 등록·우선순위 밴드), 백엔드와 플러그인이 함께 쓰는 에러 네임스페이스q.errorNamespace. 라이브러리를 고치지 않고 props의 특수 키를 추가할 수 있습니다.
Changed
아래는 이름의 대응입니다. 콜백 인자, 발화 시점, 우선순위 같은 동작 차이는 quad v1에서 v2로 옮기기가 다룹니다.
- 설치 — rbxmx 모델 내려받기·레포 클론·git submodule에서 pesde 패키지로. Roblox 프로젝트에는
roblox_packages/한 곳에 설치됩니다. - 타입 검사 — luau 플래그 넷(
LuauSolverV2,LuauTarjanChildLimit,LuauSubtypingIterationLimit,LuauTypeInferIterationLimit)을 켠 luau-lsp 환경이 필요합니다. 플래그 없이는 quad 소스의 타입 검사가 실패합니다. - 진입 —
require(quad).Init(id)→Quad:UseProvider(QuadRoblox). 같은 id로 같은 인스턴스를 다시 얻는 공유는 없고, 공유는 모듈 export나q.Context로 합니다. - 인스턴스 생성 —
Class "Frame" {...}→D.Frame {...}. - 이벤트 —
[Event "Activated"] = fn(self, ...)→ 문자 키Activated = fn(...)(self없음).[Event.Prop "Text"] = fn→ 숫자 키 자리의q.OnChange("Text", fn). - 부모 지정 —
Mount(parent, obj)→obj.Parent = parent.mounts:Add()/:Unmount()→q.Slot. - 스토어 —
Store.GetStore("name")→q.Store { key = q.Source(v) }(이름으로 찾지 않음).myStore "color"→store.color. - 파생 —
register:With(fn)→state:Compute(fn, ...deps),:Add(v)→:Apply(q.Operator.Sum(v)),:Default(v)→:Apply(q.Operator.Alternative(v)). 3.x의state:With()는 이름만 같은 다른 API입니다. - 애니메이션 —
register:Tween{...}→state:Apply(q.Animate{...}). - 관측 —
register:Register(fn)→state:Observer(fn). - 생명주기 훅 —
[Event.Created]→q.OnCreated(fn),Class.Extend의:AfterRender()→q.OnRendered(fn),:Unload()→q.OnDestroyed(fn). - 스타일 —
Style {...}→ 숫자 키 자리의D.Modifier.<Class> {...}. - 숏핸드 키 —
Corner→UICorner,PaddingAll→UIPadding,PaddingAllOffset→UIPaddingOffset,Scale→UIScale. - 컴포넌트 —
Class.Extend()+:Render()→ 평범한 함수.self "_name"링커 →q.PreRef()+ref:Unwrap(). - 정리 — props로 건 구독과 트윈은 인스턴스 수명에 묶여 인스턴스와 함께 멈춥니다(직접
:Subscribe()한 구독은 따로 해제해야 합니다). quad가 만든 인스턴스는 참조를 놓는 것만으로는 회수되지 않고Destroy()로만 회수됩니다. - 에러 — 메시지가
주어: 이유모양으로 통일되고(받은 값을 말할 때는(got X)가 붙습니다), 대부분 라이브러리 안쪽이 아니라 그걸 부른 사용자 코드의 줄을 가리킵니다.
Removed
- id로 인스턴스를 찾는 전역 조회 —
Frame "id" {...},Store.GetObject/GetObjects/AddObject. - id 문자열로 대상을 고르는 스타일 —
Style "Child" {}(Frame "..."에 준 id에 스타일 이름을 패턴으로 맞추던 방식). Class.Extend의Getter/Setter/UpdateTriggers/:Update()와:GetPropertyChangedSignal()/:EmitPropertyChangedSignal().- 코루틴 안에서 도는 비차단 생성 훅
[Event.CreatedAsync]. - register 체이닝 —
:With→:Add→:Tween처럼 이어 붙이는 누적. - 명령형 트윈 API —
Tween.RunTween/RunTweens/StopTween/IsTweening,Tween.Easings와 함수 이징,CallBack/OnStepped/Ended콜백, 인스턴스가 아닌 테이블(컴포넌트의self등)을 트윈하는 것. 선언형q.Tween/q.Animate가 그 자리입니다. Signal.Bindable/Disconnecter.Quad.Lang.Quad.Round.- 핫리로드 모듈
tracker— 튜토리얼이require(Quad.tracker)로 안내하던 자동 리로드입니다. - 이미지용 숏핸드 키
RoundSize.
Answered: 0 / 0 (0%)