GN⁺: 러스트용 Datetime 라이브러리 Jiff
(github.com/BurntSushi)- Jiff는 Rust용 날짜 및 시간 라이브러리로, 사용자가 쉽게 성공적인 결과를 얻을 수 있도록 설계됨
- 고수준의 날짜 및 시간 프리미티브를 제공하여 오용이 어렵고 성능이 우수함
- Time Zone Database와의 자동 통합, DST 인식 산술 및 반올림, 포맷팅 및 파싱 기능 제공
- Serde 지원 등 다양한 기능 포함
- JavaScript의 Temporal에서 많은 영감을 받음
- MIT 또는 UNLICENSE 이중 라이선스
향후 계획
- Jiff API를 개선하고 약 1년 동안 주기적으로 변경 사항을 릴리스할 계획
- 1년 후 API가 안정되면 Jiff 1.0을 릴리스하고 장기간 API를 유지할 계획
- 다른 사람들이 Jiff를 신뢰하고 사용할 수 있도록 하기 위함
성능
- Jiff의 가장 중요한 설계 목표는 사용자가 잘못된 작업을 하기 어렵게 만드는 것
- 두 번째 목표는 성능
- 성능은 합리적이지만 개선할 여지가 있음
- 벤치마크는
bench
디렉토리에서 확인 가능
플랫폼 지원
- 시간대 지원과 관련된 플랫폼 지원 문제
- IANA 시간대 식별자의 시간대 전환을 어떻게 결정할지
- 현재 시스템의 기본 시간대를 어떻게 결정할지
- Unix 시스템에서는
/usr/share/zoneinfo
에서 시간대 전환 데이터 검색 - Windows에서는 컴파일된 라이브러리에 시간대 데이터베이스 포함
- 시스템 시간대 검색은 Unix에서는
/etc/localtime
, Windows에서는GetDynamicTimeZoneInformation
사용
의존성
- Jiff는 Unix에서 의존성이 없음
- 새로운 의존성을 추가하는 데 매우 보수적
- 플랫폼과 상호작용하기 위해 필요한 경우나 상호 운용성을 위해 필요한 경우에만 의존성 추가
GN⁺의 정리
- Jiff는 Rust용 고수준 날짜 및 시간 라이브러리로, 사용자가 쉽게 오용하지 않도록 설계됨
- Time Zone Database와의 통합, DST 인식 산술 및 포맷팅 기능 등 다양한 기능 제공
- JavaScript의 Temporal에서 영감을 받아 설계됨
- 향후 1년 동안 API를 개선하고 안정된 1.0 버전을 릴리스할 계획
- 성능은 합리적이지만 개선할 여지가 있으며, 플랫폼 지원은 Unix와 Windows에서 잘 작동함
Hacker News 의견
-
ToSpan 문법이 다소 어색하게 느껴짐
-
let span = 5.days().hours(8).minutes(1);
문법이 첫 번째 숫자가 앞에 나오고 나머지는 함수 인수로 나오는 것이 이상함 -
let span = Span::new().days(5).hours(8).minutes(1);
로 작성할 수 있지만 몇 글자 더 필요함
-
-
datetime 라이브러리의 복잡성을 과소평가하는 사람들을 봄
- UTC/Unix 시간을 내부 표현으로 사용하거나, 기간을 나노초로 표현하거나, 시간대 대신 오프셋을 사용하라는 의견이 있음
- Jiff의 설계 문서를 읽어보기를 권장함
- chrono와의 비교도 유익함
-
DST 산술, 라운드 가능한 기간, 시간대 인식 달력 산술, 시간대 충돌 감지 등이 라이브러리를 정확하고 사용하기 쉽게 만듦
- chrono는 매우 포괄적이고 정확한 라이브러리지만 사용하기 어렵고 경직됨
-
새로운 burntsushi 라이브러리가 나왔다는 농담
- rustaceans가 crate에서
tracing
을 사용하지 않는 이유를 아는지 궁금함 -
log
는 괜찮지만 tz 작업 호출을 추적하는 것은 일반적인 사용 사례가 아님
- rustaceans가 crate에서
-
새로운 라이브러리가 멋져 보임
- burntsushi가 새로운 라이브러리를 만드는 이유가 궁금함
- 기존 라이브러리의 성능 문제나 API의 불편함 때문인지, 아니면 단순히 재미로 하는 것인지 궁금함
-
Rust의 캘린더 라이브러리 상태가 이상적이지 않음
- Pandas에서는 시간대 변환이 매우 간단하지만 Chrono에서는 복잡함
- Jiff가 올바른 방향으로 나아가고 있지만 문법이 때때로 이상함
-
기존 시간 라이브러리의 주요 문제는 윤초 지원 부족임
- UNIX 타임스탬프 대신 TAI를 사용하지 않기 때문임
- Jiff도 이 문제를 해결하지 못함
- 윤초를 2월 29일이나 시간대처럼 취급해야 한다고 생각함
-
BurntSushi가 Rust 정규 표현식 생태계의 저자임
-
Jiff의 발음에 대한 논쟁
- "gif"처럼 부드러운 "g"로 발음해야 한다는 의견
- "Giff"처럼 강한 "G"로 발음해야 한다는 의견