Jank, C++와 Clojure의 융합을 향한 끊임없는 진화
Jank는 LLVM 22 버전 문제로 인해 배포에 어려움을 겪었으나, 코드 최적화를 통해 성능 저하 문제를 해결함.
nREPL 서버를 도입하여 Clojure 개발 환경을 개선하고, C++ 코드의 대화형 컴파일(Interactive Compilation)을 지원함.
C++ 상호 운용성(Interop)을 강화하여 네이티브 루프 바인딩(Native Loop Bindings) 및 타입 DSL(Type DSL)을 지원하며, C++ 예외 처리(Exception Handling)를 구현함.
향후 성능 개선을 위해 벤치마크 구축 및 최적화에 집중할 계획이며, 지속적인 성능 테스트 환경을 구축할 예정임.
LLVM 22 버전 문제와 해결
Jank는 LLVM 22 버전에서 객체 파일 로딩(Object File Loading), JIT 런타임에 LLVM IR 모듈 추가(Adding LLVM IR Modules), 심볼 인터닝(Interning Symbols) 등 핵심 기능에 문제가 발생했다. 특히, 디버그 빌드 시 시작 시간이 1분 16초로 증가하는 성능 저하가 있었다. 이에 개발자는 코드 생성 및 JIT 컴파일(Code Generation and JIT Compilation) 방식을 재설계하여 성능 저하 문제를 해결하고, 이전보다 더 빠른 속도를 확보했다.
nREPL 서버를 통한 개발 생산성 향상
Jank는 nREPL 서버를 자체적으로 구현하여 Clojure 개발 환경(Clojure Development Environment)을 개선했다. 이 서버는 NeoVim/Conjure 및 Emacs/CIDER와 같은 편집기에서 원활하게 작동하며, C++ 코드를 대화형으로 컴파일할 수 있는 환경을 제공한다. nREPL 서버(nREPL Server)를 통해 개발자는 긴 컴파일-실행-디버깅 주기를 단축하고, C++ 코드의 반복적인 개발(Iterative Development)을 효율적으로 수행할 수 있게 되었다.
C++ 상호 운용성 개선 및 타입 DSL 도입
Jank는 C++ 상호 운용성(Interop)을 강화하기 위해 다양한 기능을 추가했다. C/C++ include를 ns 매크로에 포함하고, 네이티브 루프 바인딩(Native Loop Bindings)을 지원하며, cpp/unsafe-cast를 통해 C 스타일 캐스팅을 제공한다. 또한, 타입 DSL(Type DSL)을 도입하여 C++ 타입을 표현하고, cpp/new, cpp/cast, cpp/unsafe-cast, cpp/unbox 등에서 활용할 수 있도록 했다. 이러한 개선은 C++ 코드와의 더욱 유연한 통합(Flexible Integration)을 가능하게 한다.
성능 벤치마크 구축 및 최적화 계획
Jank 개발팀은 Q2 기간 동안 성능 개선에 집중할 계획이며, 이를 위해 벤치마크를 구축하고 최적화 작업을 진행할 예정이다. 구체적으로, Jank와 Clojure 간의 성능 비교를 위한 벤치마크를 수집하고, 프로파일링을 통해 병목 지점을 찾아낼 예정이다. 또한, 지속적인 성능 테스트 환경(Continuous Performance Testing)을 구축하여 코드 변경에 따른 성능 변화를 추적하고, Jank의 전반적인 성능 향상(Overall Performance Improvement)을 목표로 한다.