피드로 돌아가기
What if reactive effects are just pausable async tasks?
Dev.toDev.to
Frontend

Rust Async/Await 기반의 Zero-Dependency Reactive System 구현

What if reactive effects are just pausable async tasks?

chh-itt2026년 5월 13일4advanced

Context

기존 Reactive Programming의 복잡한 Effect Graph 관리와 별도 Scheduler 운영에 따른 오버헤드 발생. Rust 언어의 기본 런타임 기능을 활용하여 이를 단순화하려는 시도.

Technical Solution

  • Pin를 통한 Reactive Effect의 상태 일시 중단 및 재개 구조 설계
  • Waker 메커니즘을 활용하여 별도의 Notification Queue 없이 Executor가 직접 Effect를 스케줄링하는 방식 채택
  • Rust Ownership 및 Drop trait을 통한 자동 Unsubscribe 구현으로 메모리 누수 및 Dangling Subscriber 원천 차단
  • Re-entrancy 방지를 위해 Signal::set() 시 콜백을 즉시 실행하지 않고 Deferred Callback Queue에 적재하는 상태 머신 도입
  • BFS 기반의 취소 프로세스를 통한 깊은 계층 구조에서의 Stack Overflow 방지 및 안정적 리소스 해제
  • Topological Sort를 포기하는 대신 Version Checking 기반의 Lazy Memo Recompute를 통해 구현 복잡도 감소 및 최종 일관성 확보

1. 복잡한 상태 관리 시스템 설계 시 언어 런타임의 기본 Primitive(Async/Await, Drop 등)와 기능적 중첩 영역이 있는지 검토

2. Re-entrant Update로 인한 무한 루프 및 RefCell Panic 방지를 위해 Deferred Notification 패턴 적용 고려

3. 엄격한 실행 순서(Topological Order)가 필수적인 도메인이 아니라면, 단순한 Event-driven Poll 루프를 통한 최적화 타협안 검토

원문 읽기