- Jiff เป็นไลบรารีวันที่และเวลาสำหรับ Rust ที่ออกแบบมาเพื่อให้ผู้ใช้ได้ผลลัพธ์ที่ถูกต้องได้อย่างง่ายดาย
- มี primitive ด้านวันที่และเวลาระดับสูง ทำให้ใช้งานผิดได้ยากและมีประสิทธิภาพดี
- รองรับการผสานรวมกับ Time Zone Database อัตโนมัติ, การคำนวณและการปัดเศษที่รับรู้ DST, รวมถึงความสามารถด้านการฟอร์แมตและการพาร์ส
- มีฟีเจอร์ต่าง ๆ เช่น การรองรับ Serde
- ได้แรงบันดาลใจอย่างมากจาก Temporal ของ JavaScript
- ใช้สัญญาอนุญาตแบบคู่ MIT หรือ UNLICENSE
แผนในอนาคต
- มีแผนปรับปรุง API ของ Jiff และออกการเปลี่ยนแปลงอย่างต่อเนื่องเป็นระยะเวลาประมาณ 1 ปี
- หลังจาก 1 ปี เมื่อ API มีเสถียรภาพแล้ว จะออก Jiff 1.0 และคง API ไว้ในระยะยาว
- เพื่อให้ผู้อื่นสามารถเชื่อมั่นและนำ Jiff ไปใช้งานได้
ประสิทธิภาพ
- เป้าหมายการออกแบบที่สำคัญที่สุดของ Jiff คือทำให้ผู้ใช้ทำสิ่งที่ผิดพลาดได้ยาก
- เป้าหมายลำดับที่สองคือประสิทธิภาพ
- ประสิทธิภาพอยู่ในระดับสมเหตุสมผล แต่ยังมีพื้นที่ให้ปรับปรุง
- สามารถดู benchmark ได้ในไดเรกทอรี
bench
การรองรับแพลตฟอร์ม
- มีประเด็นด้านการรองรับแพลตฟอร์มที่เกี่ยวข้องกับการรองรับเขตเวลา
- วิธีตัดสินการแปลงเขตเวลาสำหรับตัวระบุเขตเวลาแบบ IANA
- วิธีระบุเขตเวลาเริ่มต้นของระบบปัจจุบัน
- บนระบบ Unix จะค้นหาข้อมูลการแปลงเขตเวลาจาก
/usr/share/zoneinfo
- บน Windows จะรวมฐานข้อมูลเขตเวลาไว้ในไลบรารีที่คอมไพล์แล้ว
- การค้นหาเขตเวลาของระบบ บน Unix ใช้
/etc/localtime และบน Windows ใช้ GetDynamicTimeZoneInformation
การพึ่งพา
- Jiff ไม่มี dependency บน Unix
- มีความระมัดระวังอย่างมากในการเพิ่ม dependency ใหม่
- จะเพิ่ม dependency เฉพาะเมื่อจำเป็นต่อการโต้ตอบกับแพลตฟอร์มหรือจำเป็นต่อการทำงานร่วมกันเท่านั้น
สรุปโดย GN⁺
- Jiff เป็นไลบรารีวันที่และเวลาระดับสูงสำหรับ Rust ที่ออกแบบมาเพื่อไม่ให้ผู้ใช้ใช้งานผิดได้ง่าย
- มีฟีเจอร์ต่าง ๆ เช่น การผสานรวมกับ Time Zone Database, การคำนวณที่รับรู้ DST และความสามารถด้านการฟอร์แมต
- ออกแบบโดยได้รับแรงบันดาลใจจาก Temporal ของ JavaScript
- มีแผนปรับปรุง API ในช่วง 1 ปีข้างหน้า และออกเวอร์ชัน 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 ต่ำเกินไป
arithmetic สำหรับ DST, ช่วงเวลาที่ปัดเศษได้, calendar arithmetic ที่รับรู้ time zone และการตรวจจับความขัดแย้งของ time zone เป็นสิ่งที่ทำให้ไลบรารีนี้ทั้งแม่นยำและใช้งานง่าย
มีมุกว่าไลบรารีใหม่ของ burntsushi ออกมาอีกแล้ว
tracingใน cratelogก็ใช้ได้ดี แต่การติดตามการเรียกงาน tz ไม่ใช่กรณีใช้งานทั่วไปไลบรารีใหม่นี้ดูยอดเยี่ยม
สถานะของไลบรารี calendar ใน Rust ยังไม่ค่อยน่าพอใจ
ปัญหาหลักของไลบรารีเวลาเดิมคือการไม่รองรับ leap second
BurntSushi เป็นผู้สร้าง ecosystem ของ regular expression ใน Rust
มีการถกเถียงกันเรื่องการออกเสียง Jiff