- JiffはRust向けの日時ライブラリで、ユーザーが簡単に正しい結果を得られるように設計されている
- 高水準の日時プリミティブを提供し、誤用しにくく高性能
- Time Zone Databaseとの自動統合、DST対応の演算と丸め、フォーマットおよびパース機能を提供
- Serdeサポートなど多様な機能を含む
- JavaScriptのTemporalから多くの着想を得ている
- MITまたはUNLICENSEのデュアルライセンス
今後の計画
- Jiff APIを改善し、約1年間にわたって定期的に変更をリリースする計画
- 1年後にAPIが安定したら、Jiff 1.0をリリースし、長期的にAPIを維持する計画
- 他の人々がJiffを信頼して利用できるようにするため
パフォーマンス
- Jiffの最も重要な設計目標は、ユーザーが誤った操作をしにくくすること
- 2つ目の目標はパフォーマンス
- パフォーマンスは妥当だが、改善の余地がある
- ベンチマークは
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で良好に機能する
1件のコメント
Hacker Newsの意見
ToSpan構文がややぎこちなく感じられる
let span = 5.days().hours(8).minutes(1);という構文は、最初の数値が前に出てきて残りは関数引数になるのが不自然let span = Span::new().days(5).hours(8).minutes(1);と書けるが、数文字多く必要になるdatetimeライブラリの複雑さを過小評価している人を見かける
DST演算、丸め可能な期間、タイムゾーン対応のカレンダー演算、タイムゾーンの衝突検出などが、このライブラリを正確で使いやすいものにしている
新しいburntsushiライブラリが出たという冗談
tracingを使わない理由を知っているのか気になるlogは悪くないが、tzの処理呼び出しを追跡するのは一般的なユースケースではない新しいライブラリは素晴らしそう
Rustのカレンダーライブラリの状況は理想的ではない
既存の時間ライブラリの主な問題はうるう秒のサポート不足
BurntSushiはRust正規表現エコシステムの作者
Jiffの発音をめぐる議論