2 คะแนน โดย GN⁺ 2024-07-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2024-07-23
ความคิดเห็นจาก Hacker News
  • ไวยากรณ์ ToSpan ให้ความรู้สึกแปลกอยู่บ้าง

    • ไวยากรณ์ let span = 5.days().hours(8).minutes(1); ดูแปลกตรงที่ตัวเลขตัวแรกอยู่ข้างหน้า แต่ที่เหลือมาเป็นอาร์กิวเมนต์ของฟังก์ชัน
    • เขียนเป็น let span = Span::new().days(5).hours(8).minutes(1); ได้ แต่ต้องพิมพ์เพิ่มอีกไม่กี่ตัวอักษร
  • เห็นคนจำนวนหนึ่งประเมินความซับซ้อนของไลบรารี datetime ต่ำเกินไป

    • มีความเห็นว่าควรใช้เวลาแบบ UTC/Unix เป็นรูปแบบภายใน หรือแสดงช่วงเวลาด้วยหน่วยนาโนวินาที หรือใช้ออฟเซ็ตแทน time zone
    • แนะนำให้อ่านเอกสารการออกแบบของ Jiff
    • การเปรียบเทียบกับ chrono ก็มีประโยชน์เช่นกัน
  • arithmetic สำหรับ DST, ช่วงเวลาที่ปัดเศษได้, calendar arithmetic ที่รับรู้ time zone และการตรวจจับความขัดแย้งของ time zone เป็นสิ่งที่ทำให้ไลบรารีนี้ทั้งแม่นยำและใช้งานง่าย

    • chrono เป็นไลบรารีที่ครอบคลุมและแม่นยำมาก แต่ใช้งานยากและค่อนข้างแข็งทื่อ
  • มีมุกว่าไลบรารีใหม่ของ burntsushi ออกมาอีกแล้ว

    • สงสัยว่า rustaceans รู้ไหมว่าทำไมถึงไม่ใช้ tracing ใน crate
    • log ก็ใช้ได้ดี แต่การติดตามการเรียกงาน tz ไม่ใช่กรณีใช้งานทั่วไป
  • ไลบรารีใหม่นี้ดูยอดเยี่ยม

    • สงสัยว่าอะไรทำให้ burntsushi สร้างไลบรารีใหม่ขึ้นมา
    • เป็นเพราะปัญหาด้านประสิทธิภาพของไลบรารีเดิมหรือความไม่สะดวกของ API หรือแค่ทำเพื่อความสนุก
  • สถานะของไลบรารี calendar ใน Rust ยังไม่ค่อยน่าพอใจ

    • ใน Pandas การแปลง time zone ทำได้ง่ายมาก แต่ใน Chrono กลับซับซ้อน
    • Jiff กำลังเดินไปในทิศทางที่ถูกต้อง แต่ไวยากรณ์ก็ดูแปลกในบางครั้ง
  • ปัญหาหลักของไลบรารีเวลาเดิมคือการไม่รองรับ leap second

    • เพราะไม่ได้ใช้ TAI แทน UNIX timestamp
    • Jiff ก็ยังแก้ปัญหานี้ไม่ได้
    • คิดว่าควรปฏิบัติต่อ leap second เหมือนวันที่ 29 กุมภาพันธ์หรือ time zone
  • BurntSushi เป็นผู้สร้าง ecosystem ของ regular expression ใน Rust

  • มีการถกเถียงกันเรื่องการออกเสียง Jiff

    • มีความเห็นว่าควรออกเสียงด้วย "g" นุ่มแบบ "gif"
    • มีความเห็นว่าควรออกเสียงด้วย "G" แข็งแบบ "Giff"