2 điểm bởi GN⁺ 2024-07-23 | 1 bình luận | Chia sẻ qua WhatsApp
  • Jiff là thư viện ngày và giờ cho Rust, được thiết kế để giúp người dùng dễ dàng đạt được kết quả đúng như mong muốn
  • Cung cấp các primitive ngày và giờ ở mức cao, khó bị dùng sai và có hiệu năng tốt
  • Cung cấp khả năng tích hợp tự động với Time Zone Database, phép toán và làm tròn có nhận biết DST, cùng các tính năng định dạng và phân tích cú pháp
  • Bao gồm nhiều tính năng như hỗ trợ Serde
  • Lấy nhiều cảm hứng từ Temporal của JavaScript
  • Cấp phép kép theo MIT hoặc UNLICENSE

Kế hoạch sắp tới

  • Có kế hoạch cải thiện API của Jiff và phát hành các thay đổi định kỳ trong khoảng 1 năm
  • Sau 1 năm, khi API ổn định, sẽ phát hành Jiff 1.0 và duy trì API trong thời gian dài
  • Mục tiêu là để những người khác có thể tin tưởng và sử dụng Jiff

Hiệu năng

  • Mục tiêu thiết kế quan trọng nhất của Jiff là khiến người dùng khó thực hiện thao tác sai
  • Mục tiêu thứ hai là hiệu năng
  • Hiệu năng ở mức hợp lý nhưng vẫn còn chỗ để cải thiện
  • Có thể xem benchmark trong thư mục bench

Hỗ trợ nền tảng

  • Có các vấn đề về hỗ trợ nền tảng liên quan đến hỗ trợ múi giờ
  • Cách xác định chuyển đổi múi giờ cho các định danh múi giờ IANA
  • Cách xác định múi giờ mặc định của hệ thống hiện tại
  • Trên hệ thống Unix, tra cứu dữ liệu chuyển đổi múi giờ từ /usr/share/zoneinfo
  • Trên Windows, bao gồm cơ sở dữ liệu múi giờ trong thư viện đã biên dịch
  • Việc tra cứu múi giờ hệ thống sử dụng /etc/localtime trên Unix và GetDynamicTimeZoneInformation trên Windows

Phụ thuộc

  • Jiff không có phụ thuộc trên Unix
  • Rất thận trọng trong việc thêm phụ thuộc mới
  • Chỉ thêm phụ thuộc khi cần để tương tác với nền tảng hoặc để phục vụ khả năng tương tác

Tóm tắt của GN⁺

  • Jiff là thư viện ngày và giờ mức cao cho Rust, được thiết kế để người dùng không dễ dùng sai
  • Cung cấp nhiều tính năng như tích hợp với Time Zone Database, phép toán có nhận biết DST và tính năng định dạng
  • Được thiết kế với nhiều cảm hứng từ Temporal của JavaScript
  • Có kế hoạch cải thiện API trong 1 năm tới và phát hành phiên bản 1.0 ổn định
  • Hiệu năng ở mức hợp lý nhưng còn có thể cải thiện, và hỗ trợ nền tảng hoạt động tốt trên Unix và Windows

1 bình luận

 
GN⁺ 2024-07-23
Ý kiến trên Hacker News
  • Cú pháp ToSpan tạo cảm giác hơi gượng gạo

    • Cú pháp let span = 5.days().hours(8).minutes(1); có vẻ lạ khi số đầu tiên đứng ở phía trước còn các phần còn lại lại nằm trong đối số hàm
    • Có thể viết là let span = Span::new().days(5).hours(8).minutes(1); nhưng sẽ phải gõ thêm vài ký tự
  • Có vẻ nhiều người đang đánh giá thấp độ phức tạp của thư viện datetime

    • Có ý kiến cho rằng nên dùng UTC/Unix time làm biểu diễn nội bộ, hoặc biểu diễn khoảng thời gian bằng nanosecond, hoặc dùng offset thay cho múi giờ
    • Khuyến nghị nên đọc tài liệu thiết kế của Jiff
    • So sánh với chrono cũng khá hữu ích
  • Các yếu tố như số học DST, khoảng thời gian có thể làm tròn, số học lịch có nhận biết múi giờ và phát hiện xung đột múi giờ khiến thư viện vừa chính xác vừa dễ dùng

    • chrono là một thư viện rất toàn diện và chính xác, nhưng khó dùng và cứng nhắc
  • Có câu đùa rằng lại xuất hiện thêm một thư viện burntsushi mới

    • Tò mò không biết có ai hiểu vì sao các rustacean không dùng tracing trong crate của mình không
    • log thì ổn, nhưng việc theo dõi các lời gọi xử lý tz không phải là trường hợp sử dụng phổ biến
  • Thư viện mới trông khá tuyệt

    • Tò mò vì sao burntsushi lại tạo thêm một thư viện mới
    • Không rõ là vì vấn đề hiệu năng của thư viện hiện có, sự bất tiện trong API, hay chỉ đơn giản là làm cho vui
  • Tình trạng các thư viện lịch trên Rust chưa thực sự lý tưởng

    • Trong Pandas, việc chuyển đổi múi giờ rất đơn giản nhưng trong Chrono thì phức tạp
    • Jiff đang đi đúng hướng nhưng cú pháp đôi khi vẫn hơi kỳ
  • Vấn đề lớn nhất của các thư viện thời gian hiện có là thiếu hỗ trợ leap second

    • Vì chúng không dùng TAI thay cho UNIX timestamp
    • Jiff cũng chưa giải quyết được vấn đề này
    • Có ý kiến cho rằng nên xem leap second giống như ngày 29 tháng 2 hoặc như múi giờ
  • BurntSushi là tác giả của hệ sinh thái biểu thức chính quy Rust

  • Có tranh luận về cách phát âm của Jiff

    • Có ý kiến cho rằng nên phát âm với âm "g" mềm như trong "gif"
    • Có ý kiến cho rằng nên phát âm với âm "G" cứng như trong "Giff"