Rust için tarih·saat kütüphanesi Jiff
(github.com/BurntSushi)- Jiff, Rust için bir tarih·saat kütüphanesi olup, yanlış kullanımı zor yüksek seviyeli tarih·saat temel tipleri ve makul performansı hedefler
- Temel özellikleri arasında Time Zone Database ile otomatik entegrasyon, DST farkındalıklı aritmetik ve yuvarlama, saat dilimi içeren tarih·saatlerin kayıpsız biçimlendirilmesi·ayrıştırılması ve isteğe bağlı Serde desteği bulunur
- API tasarımı, JavaScript tarih·saat işlemlerini iyileştirmeyi amaçlayan TC39 önerisi Temporal'dan büyük ölçüde etkilenmiştir
- Jiff 1.0 için ilk hedef 2025 yazında yayımlanmaktı, ancak Nisan 2026 itibarıyla takvim kaydı ve şu anda 1.0 sürümü için bir zaman çizelgesi yok
- Performans önemli bir hedef olsa da API'nin anlaşılabilirliği ve doğruluk önce gelir; Unix'te ise kasıtlı olarak 0 bağımlılığı koruyan muhafazakâr bir bağımlılık politikası izlenir
Jiff'in sunduğu tarih·saat modeli
- Jiff, Rust'ta tarih·saat işlemleri için bir kütüphanedir ve yanlış kullanılmasını zorlaştıran yüksek seviyeli temel tipler sunmaya odaklanır
- Başlıca desteklenen özellikler
- Time Zone Database ile otomatik ve sorunsuz entegrasyon
- DST'yi dikkate alan aritmetik ve yuvarlama
- Saat dilimi içeren tarih·saatlerin kayıpsız biçimlendirilmesi·ayrıştırılması
- İsteğe bağlı
serdedesteği
- API tasarımı, JavaScript tarih·saat işlemlerini iyileştirmek için hazırlanan TC39 önerisi Temporal'dan büyük ölçüde etkilenmiştir
- Lisans, MIT veya UNLICENSE çift lisansıdır
Belgeler ve kullanım örnekleri
- Belgeler ve ilgili kaynaklar
- docs.rs üzerindeki API belgeleri
chrono,time,hifitime,icuile karşılaştırma belgeleri- Jiff API tasarım gerekçesi belgesi
- Platform desteği belgesi
- Değişiklik günlüğü
- Temel örnek, bir RFC 3339 zaman damgası dizgesini ayrıştırdıktan sonra bunu saat dilimi içeren bir tarih·saate dönüştürür, bir süre ekler ve ardından kayıpsız bir dizge olarak yazdırır
"2024-07-11T01:14:00Z"değeriniTimestampolarak ayrıştırmaAmerica/New_Yorksaat dilimine dönüştürme1.month().hours(2)ekleme- Sonuç dizgesi
"2024-08-10T23:14:00-04:00[America/New_York]" - RFC 3339 biçimindeki UTC zamanı
"2024-08-11T03:14:00Z"
Kurulum ve temel çalıştırma akışı
- Jiff, crates.io üzerinde yer alır ve Rust projesindeki
Cargo.tomlbağımlılıklarınajiffeklenerek kullanılabilir - Hızlı ekleme komutu
cargo add jiff - README'deki tam örnek akış
cargo new jiff-exampleile yeni proje oluşturmacargo add jiffile bağımlılık eklemesrc/main.rsiçindeZoned::now().round(Unit::Second)?ile mevcut zamanı saniye hassasiyetine yuvarlamacargo runile çalıştırma
- Örnek çıktı, saat dilimi içeren
2024-07-10T19:54:20-04:00[America/New_York]biçimini gösterir - İlk çalıştırmada daha fazla derleme çıktısı görülür, ancak sonraki çalıştırmalarda bağımlılıkların yeniden derlenmesi gerekmez
Özellik bayrakları ve 1.0 planı
- Jiff, Rust standart kütüphanesi desteği,
serdedesteği ve Time Zone Database'in ikili dosyaya gömülüp gömülmeyeceğini ayarlayan çeşitli crate feature'ları sunar - Desteklenen tüm özellik bayraklarının listesi belgelerdeki “crate features” bölümünde yer alır
- Jiff 1.0 için ilk yayımlama planı 2025 yazıydı, ancak Nisan 2026 itibarıyla takvim zaten kaymış durumda ve şu an için bir sürüm zaman çizelgesi yok
- 1.0 yayımlandıktan sonra API'nin süresiz olarak korunması planlanıyor; amaç, kullanıcıların Jiff'i genel kullanıma açık API'ler için kararlı bir temel olarak kullanabilmesi
- Jiff 1.0 çıktıktan sonra da Jiff 0.2, 1 yıl boyunca önemli hata düzeltmesi güncellemeleri almaya devam edecek
- Etkin özellik geliştirmesi olmayacak
- Hâlihazırda Jiff 0.2 kullanan çok sayıda kullanıcı olduğu için geçişe bir uyum süresi tanınması planlanıyor
Performans ve gelişmiş biçimlendirme yolları
- En önemli tasarım hedefi, yanlış kullanımı zor bir yüksek seviyeli tarih·saat kütüphanesi olmaktır
- Performans ikinci hedeftir; makul performans amaçlansa da iyileştirmeye açık alanlar olabilir
- Benchmark'lar
benchdizininde bulunur - Bazı alanlarda optimizasyon yapılmıştır, ancak henüz optimize edilmemiş birçok alan da vardır
- Performans iyileştirmeleri hedeflenir, ancak genel olarak API'nin anlaşılabilirliği ve doğruluk performanstan önce gelir
- Jiff'in alt modülleri, özellikle
jiff::fmt, daha fazla kontrol gerektiren karmaşık API'ler için bir çıkış yolu işlevi görürZonediçinstd::fmt::Displayimplementasyonu, yeniden kullanılabilir bir arabelleğe yazmayı zorlaştırabilirjiff::fmt::temporal::DateTimePrinter::print_zoned,Zoneddeğerinin mevcut birStringveyaVec<u8>içine yazılmasını sağlar
Platforma göre saat dilimi işleme
- Tarih·saat kütüphanelerinde platform desteği sorunu çoğunlukla saat dilimi desteği ile ilgilidir
- Jiff'in ele aldığı platform etkileşimleri
Antarctica/Trollgibi IANA saat dilimi tanımlayıcıları için geçiş verilerinin nasıl bulunacağı- Sistemin mevcut varsayılan saat diliminin nasıl bulunacağı
- Saat dilimi geçiş verileri IANA Time Zone Database'e dayanır
- Unix'te genellikle
/usr/share/zoneinfokullanılır veTZDIRortam değişkeni ayarı da izlenir - Windows'ta derlenmiş kütüphaneye Time Zone Database kopyası otomatik olarak gömülür
- Sistem saat dilimi tespit yöntemi
- Unix'te
/etc/localtimeokunur - Windows'ta
GetDynamicTimeZoneInformationile Windows'a özgü saat dilimi tanımlayıcısı okunur ve Unicode'un CLDR XML data verisi üzerinden IANA saat dilimi tanımlayıcısına eşlenir
- Unix'te
- Diğer platformlar için desteğin zamanla artması bekleniyor, ancak test edilmesi zor nadir platformlarda büyük olasılıkla katkıcıların pull request'lerine dayanılacak
Bağımlılıklar ve MSRV politikası
- Jiff'in Unix'te 0 bağımlılığa sahip olması kasıtlı bir tasarımdır
- Ekosistemdeki bir crate olarak Jiff'e yeni bağımlılık ekleme ölçütleri muhafazakârdır
- Platformla etkileşim için gerçekten gerekliyse
- Birlikte çalışabilirlik için gerekliyse; örneğin
serde
- Birlikte çalışabilirlik amaçlı bağımlılıklar da muhafazakâr biçimde ele alınır; genel olarak Jiff'ten daha az breaking change sürümü çıkaranlara bağımlı olunması tercih edilir
- Jiff'in birden fazla crate'e bölünmesi durumunda yeni bağımlılıklar oluşabilir, ancak şu anda böyle bir plan yok
- Crate sayısını küçük tutma yönünde bir yaklaşım benimseniyor; çok sayıda semver API sınırını yönetmenin bakım yükünün yüksek olduğu deneyimle görülmüş durumda
- Jiff'in desteklediği en düşük Rust derleyici sürümü MSRV 1.70.0
- Jiff'in kendisi ve depo içindeki Jiff bağımlılıkları, son 1 yıl içinde yayımlanmış Rust derleyicisi gerektiren Rust sürümlerini kullanmaz
jiff-icugibi depo içinde Jiff'e bağımlı crate'ler daha yeni bir MSRV kullanabilir, ancak entegre oldukları crate'den daha yeni bir MSRV gerektirmezwindows-sys,portable-atomicgibi harici bağımlılıkların MSRV'si Jiff'in kontrolünde değildir- Rust ekosistemi geleneğine uygun olarak Jiff, MSRV artışını semver uyumsuz bir değişiklik saymaz; ancak MSRV artışlarını minor version güncellemeleriyle sınırlar
Henüz yorum yok.