현재 Ruby LSP 인덱서 구현에는 몇 가지 중요한 문제가 있습니다. 첫째, 대규모 코드베이스(예: Shopify의 핵심 Rails 모놀리스)의 경우 인덱싱에 약 90초가 소요되어 매우 느립니다. 둘째, 인덱스에 대한 캐싱 기능이 없어 언어 서버가 시작될 때마다 처음부터 인덱스를 다시 빌드해야 합니다. 셋째, 인덱스가 많은 메모리 공간(Shopify 코어의 경우 약 2.2GB)을 차지하며, 마지막으로 현재 Ruby LSP의 내부 구성 요소이기 때문에 다른 서비스에서 인덱스에 접근할 수 없습니다.
Sid는 이러한 문제들을 해결하기 위해 성능, 캐싱, 메모리 사용량 측면에서 개선된 인덱서를 구축하는 데 기여하고 있습니다. 특히, 대규모 코드베이스의 AST(추상 구문 트리) 파싱 및 순회에 대한 Ruby 및 Rust 구현 벤치마킹을 통해 Rust가 훨씬 빠르다는 결과를 확인했습니다. 이러한 경험은 추출될 인덱서의 기술 스택 결정에 중요한 영향을 미칠 것으로 예상됩니다.
안식년 동안 Sid는 두 권의 중요한 기술 서적을 탐독하고 있습니다. 첫 번째는 ‘Crafting Interpreters’로, 인터프리터, 컴파일러 및 프로그래밍 언어에 대한 이해를 높이는 데 도움을 주며, Lox 인터프리터를 Ruby로 구현하는 실습을 통해 언어 분석의 기본 원리를 심화하고 있습니다. 이는 Ruby LSP가 소스 코드를 나타내는 AST를 생성하기 위해 Prism에 의존하는 방식과 직접적으로 연관되어 있습니다. 두 번째 책은 ‘The Rust Programming Language’로, Rust의 소유권(ownership) 및 빌림(borrowing) 규칙과 같은 독특한 패러다임을 이해하는 데 중점을 둡니다. 예를 들어, 값에 대한 단일 소유자 유지와 가변 참조 사용 시 다른 참조의 사용 금지가 메모리 관리 효율성과 데이터 경쟁 방지에 어떻게 기여하는지 명확히 이해하게 되었습니다.