Go 언어 개발자를 위한 새로운 십진수(Decimal) 라이브러리 '제로데시멀(zerodecimal)'이 등장했습니다. 이 라이브러리는 금융, 과학 계산 등 정밀한 십진수 연산이 필요한 애플리케이션에서 발생할 수 있는 성능 저하와 메모리 할당 문제를 해결하는 데 초점을 맞췄습니다. 개발자에 따르면, 제로데시멀은 모든 연산에서 힙 할당(heap allocation)을 전혀 발생시키지 않으며, 기존 Go 십진수 라이브러리 중 가장 빠르다고 알려진 'udecimal'보다 약 35% 더 빠른 성능을 제공합니다.
제로데시멀의 핵심은 128비트 고정 소수점(fixed-point) 연산을 사용하며, 'big.Int'와 같은 임의 정밀도(arbitrary-precision) 라이브러리에 의존하지 않는다는 점입니다. 특히, 십진수 연산에서 빈번하게 발생하는 10의 거듭제곱으로 나누는 작업(스케일링, 반올림, 포매팅 등)을 하드웨어 DIV 명령어 대신 미리 계산된 곱셈 기반의 역수(reciprocal) 연산으로 대체하는 '묄러-그란룬트(Möller–Granlund) 2-by-1 트릭'과 '매직 상수(magic constants)'를 활용했습니다. 이는 18사이클이 소요되는 DIV 연산을 단일 곱셈과 시프트 연산으로 대체하여 성능을 크게 향상시켰습니다. 또한, 모든 연산은 'shopspring/decimal' 라이브러리의 무한 정밀도 연산과 비교 검증되어 정확성을 확보했으며, 패닉(panic) 없이 오류를 반환하도록 설계되었습니다.
이러한 최적화는 지연 시간에 민감한(latency-critical) 애플리케이션, 예를 들어 고빈도 금융 거래 시스템이나 실시간 데이터 처리 시스템에서 큰 이점을 제공할 것으로 예상됩니다. 힙 할당이 없다는 것은 가비지 컬렉션(Garbage Collection, GC) 부하를 줄여 예측 가능한 성능을 보장하며, 이는 시스템 안정성과 처리량에 직접적인 영향을 미칩니다. 제로데시멀은 Go 1.26 이상을 요구하며, 별도의 런타임 의존성 없이 사용할 수 있어 개발자들이 쉽게 도입할 수 있습니다. 이 라이브러리는 Go 생태계에서 정밀하고 빠른 십진수 연산이 필요한 모든 곳에서 표준으로 자리 잡을 잠재력을 가지고 있습니다.