2 puan yazan GN⁺ 2024-07-23 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 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ı serde desteğ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, icu ile 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ğerini Timestamp olarak ayrıştırma
    • America/New_York saat dilimine dönüştürme
    • 1.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.toml bağımlılıklarına jiff eklenerek kullanılabilir
  • Hızlı ekleme komutu cargo add jiff
  • README'deki tam örnek akış
    • cargo new jiff-example ile yeni proje oluşturma
    • cargo add jiff ile bağımlılık ekleme
    • src/main.rs içinde Zoned::now().round(Unit::Second)? ile mevcut zamanı saniye hassasiyetine yuvarlama
    • cargo run ile ç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, serde desteğ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 bench dizininde 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ür

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/Troll gibi 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/zoneinfo kullanılır ve TZDIR ortam 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/localtime okunur
    • Windows'ta GetDynamicTimeZoneInformation ile 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
  • 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-icu gibi depo içinde Jiff'e bağımlı crate'ler daha yeni bir MSRV kullanabilir, ancak entegre oldukları crate'den daha yeni bir MSRV gerektirmez
  • windows-sys, portable-atomic gibi 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.

Henüz yorum yok.