0002 · UI 트리와 이벤트
상태: 제안 · 명세 버전: 0.1.0-draft
호스트 작업
프레임워크 어댑터는 다음 의미의 작업을 스피논 호스트에 제출한다. 이 목록은 언어 간 C ABI 형식이 아니라 의미 계약이다.
노드 ID는 앱 세션 안에서 안정적이어야 한다. 제거한 ID를 같은 세션에서 즉시 재사용하지 않는 방향을 제안한다. commit 성공은 트리 갱신을 뜻하며 픽셀 표시 완료를 뜻하지 않는다. 실패한 작업 묶음의 부분 적용 여부와 오류 복구는 미정이다. 이를 결정하기 전에는 원자적 커밋이라고 홍보하지 않는다.
S01을 완료하기 전에는 실패 후 Rust 트리와 JS 어댑터가 같은 revision을 다시 사용할지, 변경 묶음을 폐기·재시도할지의 계약을 확정한다. 이 문서는 아직 특정 복구 방식을 선택하지 않는다.
프레임워크의 React Fiber, Vue 반응성, Svelte 컴파일 결과는 각 어댑터가 소유한다. Rust 코어는 이 알고리즘을 재구현하지 않고 호스트 작업과 그 결과만 소유한다.
이벤트
플랫폼 입력 → 좌표·대상 판정 또는 접근성 동작 → 노드 ID·이벤트 종류 → 등록된 JS 핸들러 순서로 전달한다. 이벤트는 해당 트리 revision과 연결돼야 한다. 제거된 노드의 콜백은 해제돼야 하며, 지연 중인 이벤트가 제거된 노드를 가리킬 때의 폐기·재대상 지정 규칙은 미정이다.
S05를 완료하기 전에는 오래된 revision의 이벤트를 받은 어댑터의 동작과 콜백 해제 시점을 확정한다. 이벤트 전파·기본 동작·동기 취소는 별도 범위로 남는다.
첫 수직 구현의 목표는 <button> 활성화와 클릭이다. onClick은 React 어댑터의 작성 문법이며 Vue·Svelte는 자체 문법을 사용한다. 이벤트 전파, 캡처, stopPropagation(), preventDefault(), 포인터 취소, 키보드 활성화 순서는 아직 확정하지 않았다. 해당 동작을 웹과 같다고 주장하기 전에 표준 이벤트 시나리오와 플랫폼 접근성 활성화 시나리오를 명세해야 한다.
스레드와 수명
JS Isolate·Rust 트리·GPU 표면은 각각 소유 경계가 있다. 핸들·콜백·GPU 자원을 다른 경계로 넘길 때 소유자, 해제 시점, 오류 전달을 정한다. OS 입력 스레드가 JS 완료를 기다려야 하는 동작과 비동기로 넘길 수 있는 동작은 미정이며 실기기 지연 측정과 함께 결정한다.