Rust library for Temporenc, a binary date/time format.
Great performance is a high priority for this implementation. It uses a different struct for each of the temporal types (date, date and time, etc). This allows for hand-tuned serialization and deserialization logic for each type. There also is no heap allocation (aside from test code, of course).
See below for some sample performance numbers from an i7-6850K (a 3.6Ghz Broadwell-E chip). Batches of 100 are used because time measurement accuracy is poor when single operations only take a few nanoseconds.
Operation | Quantity | Type | Time |
---|---|---|---|
Deserialize | 100 | random date | 665ns |
Deserialize | 100 | random date + time | 985ns |
Deserialize | 100 | random date + time + offset | 974ns |
Deserialize | 100 | random date + time + subsecond | 1300ns |
Deserialize | 100 | random date + time + subsecond + offset | 1473ns |
Deserialize | 100 | random time | 801ns |
Serialize | 100 | random date | 288ns |
Serialize | 100 | random date + time | 435ns |
Serialize | 100 | random date + time + offset | 492ns |
Serialize | 100 | random date + time + subsecond | 897ns |
Serialize | 100 | random date + time + subsecond + offset | 982ns |
Serialize | 100 | random time | 277ns |