반응형 시스템은 데이터 노드 간의 의존성 그래프를 구축하는 경우가 많습니다. 변경이 발생하면 시스템은 모든 종속 값이 일관성을 유지하도록 업데이트를 전파해야 합니다. 이는 잘 알려진 Observer 패턴과 비교할 때 추가적인 간접성, 실행 순서 보장(예: 글리치 없음), 그리고 런타임 오버헤드를 야기할 수 있습니다. 논문에서는 일부 FRP(Functional Reactive Programming) 구현이 동등한 Observer 기반 코드보다 최대 50배 느릴 수 있음을 보여줍니다. 이러한 성능 문제를 해결하기 위해 Viering의 논문은 Graal VM의 Ruby 인터프리터인 TruffleRuby와 공격적인 런타임 최적화를 위한 Graal JIT 컴파일러를 사용하여 구축된 새로운 언어 레이어인 Reactive Ruby를 제안합니다. TruffleRuby 내부에 반응형 구성을 임베드하고 JIT 컴파일을 활용함으로써, 시스템은 최적화된 Observer 기반 코드와 견줄만한 성능을 달성합니다. 이는 주요한 돌파구입니다.
실제 Ruby에서 이러한 아이디어를 실험하기 위한 방법으로 두 가지 예시가 제시됩니다. 첫째는 ‘Reactive Variable Propagation’으로, ReactiveVar
클래스를 통해 변수 값이 변경될 때 구독자에게 자동으로 알리는 방식을 보여줍니다. 이는 반응형 변수의 기본적인 동작을 구현합니다. 둘째는 ‘Building a Dependency Graph’로, ReactiveNode
클래스를 통해 의존성을 추적하고 노드 변경 시 종속된 노드를 업데이트하는 구조를 보여줍니다. 이 간단한 구조는 Reactive Ruby가 변경 사항을 추적하고 노드를 효율적으로 업데이트하는 방식을 반영합니다. 또한, 업데이트가 너무 일찍 전파되어 일관성 없는 중간 상태를 생성하는 ‘글리치(glitch)’ 현상을 피하기 위해, 전파 전에 의존성 그래프를 위상 정렬하는 아이디어도 논문에서 탐구되었음을 언급합니다.