Rust Arena로 Gleam 포매터 24% 속도 향상!
Rust Arena를 활용하여 Gleam 언어의 pretty printer 성능을 획기적으로 개선함
메모리 할당(Memory Allocation) 최적화를 통해 응답 속도 24% 향상 및 피크 메모리 사용량 10% 감소 달성
3년 된 이슈를 해결하며 반복적이고 지루한 작업을 자동화하는 즐거움을 발견함
Rust Arena를 통한 메모리 관리 최적화
기존 Gleam의 pretty printer는 재귀적 데이터 구조인 `Document`와 `Box`를 사용하여 힙(Heap) 할당이 빈번했다. Rust Arena를 도입하여 `Box` 대신 Arena 할당 참조(Arena Allocated References)를 사용함으로써, 힙 할당 오버헤드를 줄였다. 이는 데이터 격리 아키텍처(Data Isolation Architecture)를 구현하는 효과와 유사하며, 반복적인 문서 객체 생성을 최소화하여 성능을 개선했다는 평가다.
성능 향상 및 메모리 사용량 감소
실제 Gleam 프로젝트인 Squirrel에 적용한 결과, pretty printer의 실행 시간이 13ms에서 9.8ms로 24% 단축되었다. 전체 `gleam format` 명령어 실행 시간도 13% 빨라졌으며, 피크 메모리 사용량은 8.4MB에서 7.6MB로 10% 감소했다. 이는 힙 할당(Heap Allocation) 감소가 런타임 성능(Runtime Performance)과 메모리 효율성(Memory Efficiency)에 미치는 긍정적 영향을 보여준다.
Arena 핸들 기반 최적화 가능성
커뮤니티에서는 현재 사용된 Arena 참조(Arena References) 대신 불투명 핸들(Opaque Handles)을 사용하는 다른 Arena 구현체를 고려할 수 있다고 제안한다. 특히 할당되는 객체가 작고 많을 경우, 64비트 참조 대신 16비트 또는 32비트 핸들을 사용하면 메모리 사용량을 추가로 절감할 수 있다는 분석이다. `compact_arena`와 같은 크레이트(Crate)가 언급되었으나, 필요시 자체 구현도 가능하다는 의견이 제시되었다.
개발자의 반복 작업 자동화와 즐거움
3년 된 이슈를 해결하기 위해 find-and-replace와 같은 반복적인 작업을 수행하는 과정에서 개발자는 '뇌를 끄고 키보드만 두드리는' 즐거움을 느꼈다고 한다. 이는 복잡한 알고리즘 구현과는 다른 종류의 성취감을 제공하며, 오래된 기술 부채(Technical Debt) 해소의 중요성을 보여준다. LLM 사용을 지양하고 직접 코드를 작성하는 방식에 대한 개인적인 선호도도 언급되었다.