Skip to content

Conversation

SpriteOvO
Copy link
Owner

Closes #98.

Since the author of itoa decided not to support leading zeros (dtolnay/itoa#61 (comment)), we will only experiment with numtoa to see if there is any performance improvement and decide to use it or not.

I will benchmark this PR on a real machine tomorrow.

Self-reminder

This PR uses the numtoa I forked, so merge this after the upstream PR mmstick/numtoa#40 is merged and released.

@SpriteOvO
Copy link
Owner Author

SpriteOvO commented Sep 28, 2025

Before

test bench_1_file               ... bench:         195.69 ns/iter (+/- 13.53)
test bench_2_file_async         ... bench:         243.52 ns/iter (+/- 15.84)
test bench_3_rotating_file_size ... bench:         197.99 ns/iter (+/- 35.30)
test bench_4_rotating_daily     ... bench:         196.43 ns/iter (+/- 13.12)
test bench_5_level_off          ... bench:           1.40 ns/iter (+/- 0.04)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured; 0 filtered out; finished in 17.11s
test bench_1_full_formatter       ... bench:          83.51 ns/iter (+/- 5.01)
test bench_1_json_formatter       ... bench:         166.04 ns/iter (+/- 15.92)
test bench_2_full_pattern_ct      ... bench:         138.17 ns/iter (+/- 11.80)
test bench_3_full_pattern_rt      ... bench:         140.68 ns/iter (+/- 10.16)
test bench_4_ct_am_pm             ... bench:          60.71 ns/iter (+/- 2.18)
test bench_4_ct_column            ... bench:          38.33 ns/iter (+/- 3.50)
test bench_4_ct_date              ... bench:          75.19 ns/iter (+/- 8.07)
test bench_4_ct_date_short        ... bench:          73.92 ns/iter (+/- 7.21)
test bench_4_ct_datetime          ... bench:          91.50 ns/iter (+/- 10.28)
test bench_4_ct_day               ... bench:          64.51 ns/iter (+/- 5.75)
test bench_4_ct_eol               ... bench:          36.24 ns/iter (+/- 2.75)
test bench_4_ct_file              ... bench:          37.86 ns/iter (+/- 2.27)
test bench_4_ct_file_name         ... bench:          35.97 ns/iter (+/- 1.40)
test bench_4_ct_full              ... bench:          96.20 ns/iter (+/- 8.89)
test bench_4_ct_hour              ... bench:          64.49 ns/iter (+/- 5.04)
test bench_4_ct_hour_12           ... bench:          64.62 ns/iter (+/- 6.27)
test bench_4_ct_level             ... bench:          39.62 ns/iter (+/- 5.53)
test bench_4_ct_level_short       ... bench:          39.39 ns/iter (+/- 0.55)
test bench_4_ct_line              ... bench:          38.33 ns/iter (+/- 2.99)
test bench_4_ct_logger            ... bench:          38.95 ns/iter (+/- 1.88)
test bench_4_ct_microsecond       ... bench:          80.18 ns/iter (+/- 19.34)
test bench_4_ct_millsecond        ... bench:          73.10 ns/iter (+/- 4.69)
test bench_4_ct_minute            ... bench:          62.51 ns/iter (+/- 5.27)
test bench_4_ct_module_path       ... bench:          38.88 ns/iter (+/- 3.48)
test bench_4_ct_month             ... bench:          64.16 ns/iter (+/- 4.57)
test bench_4_ct_month_name        ... bench:          65.89 ns/iter (+/- 5.02)
test bench_4_ct_month_name_full   ... bench:          61.89 ns/iter (+/- 2.24)
test bench_4_ct_nanosecond        ... bench:          79.60 ns/iter (+/- 8.04)
test bench_4_ct_payload           ... bench:          39.04 ns/iter (+/- 3.69)
test bench_4_ct_pid               ... bench:          54.29 ns/iter (+/- 8.43)
test bench_4_ct_second            ... bench:          63.32 ns/iter (+/- 8.40)
test bench_4_ct_source            ... bench:          38.00 ns/iter (+/- 3.07)
test bench_4_ct_tid               ... bench:          52.84 ns/iter (+/- 3.61)
test bench_4_ct_time              ... bench:          76.61 ns/iter (+/- 0.57)
test bench_4_ct_time_12           ... bench:          75.41 ns/iter (+/- 4.64)
test bench_4_ct_time_short        ... bench:          65.90 ns/iter (+/- 3.46)
test bench_4_ct_tz_offset         ... bench:          63.68 ns/iter (+/- 5.39)
test bench_4_ct_unix_timestamp    ... bench:          64.09 ns/iter (+/- 5.41)
test bench_4_ct_weekday_name      ... bench:          64.54 ns/iter (+/- 5.23)
test bench_4_ct_weekday_name_full ... bench:          63.59 ns/iter (+/- 13.02)
test bench_4_ct_year              ... bench:          64.11 ns/iter (+/- 5.08)
test bench_4_ct_year_short        ... bench:          65.96 ns/iter (+/- 2.07)
test bench_5_rt_am_pm             ... bench:          68.51 ns/iter (+/- 2.57)
test bench_5_rt_column            ... bench:          41.60 ns/iter (+/- 5.33)
test bench_5_rt_date              ... bench:          78.67 ns/iter (+/- 4.34)
test bench_5_rt_date_short        ... bench:          76.34 ns/iter (+/- 4.71)
test bench_5_rt_datetime          ... bench:          96.80 ns/iter (+/- 4.42)
test bench_5_rt_day               ... bench:          68.85 ns/iter (+/- 0.69)
test bench_5_rt_eol               ... bench:          38.12 ns/iter (+/- 2.01)
test bench_5_rt_file              ... bench:          40.00 ns/iter (+/- 4.37)
test bench_5_rt_file_name         ... bench:          39.45 ns/iter (+/- 1.58)
test bench_5_rt_full              ... bench:         104.59 ns/iter (+/- 29.35)
test bench_5_rt_hour              ... bench:          67.53 ns/iter (+/- 5.98)
test bench_5_rt_hour_12           ... bench:          65.05 ns/iter (+/- 8.57)
test bench_5_rt_level             ... bench:          41.95 ns/iter (+/- 3.79)
test bench_5_rt_level_short       ... bench:          40.64 ns/iter (+/- 4.11)
test bench_5_rt_line              ... bench:          39.84 ns/iter (+/- 2.27)
test bench_5_rt_logger            ... bench:          39.57 ns/iter (+/- 1.60)
test bench_5_rt_microsecond       ... bench:          78.39 ns/iter (+/- 4.44)
test bench_5_rt_millsecond        ... bench:          78.98 ns/iter (+/- 13.18)
test bench_5_rt_minute            ... bench:          68.98 ns/iter (+/- 2.88)
test bench_5_rt_module_path       ... bench:          38.51 ns/iter (+/- 4.41)
test bench_5_rt_month             ... bench:          63.72 ns/iter (+/- 3.06)
test bench_5_rt_month_name        ... bench:          65.27 ns/iter (+/- 5.83)
test bench_5_rt_month_name_full   ... bench:          65.77 ns/iter (+/- 3.73)
test bench_5_rt_nanosecond        ... bench:          81.23 ns/iter (+/- 3.46)
test bench_5_rt_payload           ... bench:          42.51 ns/iter (+/- 4.69)
test bench_5_rt_pid               ... bench:          57.29 ns/iter (+/- 5.54)
test bench_5_rt_second            ... bench:          67.42 ns/iter (+/- 5.39)
test bench_5_rt_source            ... bench:          39.34 ns/iter (+/- 1.65)
test bench_5_rt_tid               ... bench:          53.23 ns/iter (+/- 5.38)
test bench_5_rt_time              ... bench:          76.06 ns/iter (+/- 14.06)
test bench_5_rt_time_12           ... bench:          77.75 ns/iter (+/- 3.35)
test bench_5_rt_time_short        ... bench:          73.13 ns/iter (+/- 8.43)
test bench_5_rt_tz_offset         ... bench:          68.19 ns/iter (+/- 5.45)
test bench_5_rt_unix_timestamp    ... bench:          66.28 ns/iter (+/- 4.74)
test bench_5_rt_weekday_name      ... bench:          63.58 ns/iter (+/- 2.88)
test bench_5_rt_weekday_name_full ... bench:          67.71 ns/iter (+/- 2.54)
test bench_5_rt_year              ... bench:          67.61 ns/iter (+/- 4.07)
test bench_5_rt_year_short        ... bench:          64.77 ns/iter (+/- 3.79)

test result: ok. 0 passed; 0 failed; 0 ignored; 80 measured; 0 filtered out; finished in 40.87s

After

test bench_1_file               ... bench:         189.57 ns/iter (+/- 10.78)
test bench_2_file_async         ... bench:         229.95 ns/iter (+/- 20.25)
test bench_3_rotating_file_size ... bench:         192.22 ns/iter (+/- 36.45)
test bench_4_rotating_daily     ... bench:         196.21 ns/iter (+/- 15.13)
test bench_5_level_off          ... bench:           1.18 ns/iter (+/- 0.08)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured; 0 filtered out; finished in 19.94s
test bench_1_full_formatter       ... bench:          81.42 ns/iter (+/- 6.23)
test bench_1_json_formatter       ... bench:         158.59 ns/iter (+/- 7.60)
test bench_2_full_pattern_ct      ... bench:         133.51 ns/iter (+/- 6.24)
test bench_3_full_pattern_rt      ... bench:         134.88 ns/iter (+/- 4.24)
test bench_4_ct_am_pm             ... bench:          64.14 ns/iter (+/- 3.74)
test bench_4_ct_column            ... bench:          38.07 ns/iter (+/- 1.73)
test bench_4_ct_date              ... bench:          77.01 ns/iter (+/- 1.24)
test bench_4_ct_date_short        ... bench:          74.72 ns/iter (+/- 6.27)
test bench_4_ct_datetime          ... bench:          91.03 ns/iter (+/- 11.50)
test bench_4_ct_day               ... bench:          62.40 ns/iter (+/- 3.50)
test bench_4_ct_eol               ... bench:          36.92 ns/iter (+/- 2.60)
test bench_4_ct_file              ... bench:          37.74 ns/iter (+/- 2.71)
test bench_4_ct_file_name         ... bench:          37.16 ns/iter (+/- 3.98)
test bench_4_ct_full              ... bench:          88.13 ns/iter (+/- 16.85)
test bench_4_ct_hour              ... bench:          64.53 ns/iter (+/- 2.61)
test bench_4_ct_hour_12           ... bench:          64.61 ns/iter (+/- 6.20)
test bench_4_ct_level             ... bench:          38.75 ns/iter (+/- 3.83)
test bench_4_ct_level_short       ... bench:          36.93 ns/iter (+/- 3.38)
test bench_4_ct_line              ... bench:          37.26 ns/iter (+/- 2.64)
test bench_4_ct_logger            ... bench:          39.33 ns/iter (+/- 2.34)
test bench_4_ct_microsecond       ... bench:          72.34 ns/iter (+/- 4.61)
test bench_4_ct_millsecond        ... bench:          73.38 ns/iter (+/- 6.22)
test bench_4_ct_minute            ... bench:          66.58 ns/iter (+/- 7.10)
test bench_4_ct_module_path       ... bench:          37.71 ns/iter (+/- 3.11)
test bench_4_ct_month             ... bench:          64.75 ns/iter (+/- 6.29)
test bench_4_ct_month_name        ... bench:          63.62 ns/iter (+/- 3.71)
test bench_4_ct_month_name_full   ... bench:          64.33 ns/iter (+/- 4.71)
test bench_4_ct_nanosecond        ... bench:          78.16 ns/iter (+/- 11.47)
test bench_4_ct_payload           ... bench:          40.35 ns/iter (+/- 3.08)
test bench_4_ct_pid               ... bench:          49.71 ns/iter (+/- 2.72)
test bench_4_ct_second            ... bench:          65.37 ns/iter (+/- 3.66)
test bench_4_ct_source            ... bench:          40.72 ns/iter (+/- 3.03)
test bench_4_ct_tid               ... bench:          48.33 ns/iter (+/- 2.81)
test bench_4_ct_time              ... bench:          79.01 ns/iter (+/- 2.31)
test bench_4_ct_time_12           ... bench:          81.32 ns/iter (+/- 2.97)
test bench_4_ct_time_short        ... bench:          70.70 ns/iter (+/- 1.68)
test bench_4_ct_tz_offset         ... bench:          65.55 ns/iter (+/- 6.20)
test bench_4_ct_unix_timestamp    ... bench:          64.96 ns/iter (+/- 6.10)
test bench_4_ct_weekday_name      ... bench:          64.89 ns/iter (+/- 4.82)
test bench_4_ct_weekday_name_full ... bench:          61.20 ns/iter (+/- 3.93)
test bench_4_ct_year              ... bench:          64.38 ns/iter (+/- 7.70)
test bench_4_ct_year_short        ... bench:          63.08 ns/iter (+/- 4.40)
test bench_5_rt_am_pm             ... bench:          64.10 ns/iter (+/- 4.56)
test bench_5_rt_column            ... bench:          39.66 ns/iter (+/- 2.72)
test bench_5_rt_date              ... bench:          76.23 ns/iter (+/- 4.84)
test bench_5_rt_date_short        ... bench:          77.28 ns/iter (+/- 8.36)
test bench_5_rt_datetime          ... bench:          93.57 ns/iter (+/- 7.00)
test bench_5_rt_day               ... bench:          66.75 ns/iter (+/- 5.66)
test bench_5_rt_eol               ... bench:          40.22 ns/iter (+/- 3.44)
test bench_5_rt_file              ... bench:          40.89 ns/iter (+/- 4.90)
test bench_5_rt_file_name         ... bench:          39.95 ns/iter (+/- 2.66)
test bench_5_rt_full              ... bench:          95.05 ns/iter (+/- 5.41)
test bench_5_rt_hour              ... bench:          66.97 ns/iter (+/- 4.03)
test bench_5_rt_hour_12           ... bench:          65.81 ns/iter (+/- 6.01)
test bench_5_rt_level             ... bench:          41.43 ns/iter (+/- 3.01)
test bench_5_rt_level_short       ... bench:          38.85 ns/iter (+/- 3.14)
test bench_5_rt_line              ... bench:          40.07 ns/iter (+/- 2.22)
test bench_5_rt_logger            ... bench:          38.88 ns/iter (+/- 2.91)
test bench_5_rt_microsecond       ... bench:          76.23 ns/iter (+/- 3.93)
test bench_5_rt_millsecond        ... bench:          72.86 ns/iter (+/- 5.71)
test bench_5_rt_minute            ... bench:          67.34 ns/iter (+/- 8.39)
test bench_5_rt_module_path       ... bench:          39.34 ns/iter (+/- 2.21)
test bench_5_rt_month             ... bench:          66.18 ns/iter (+/- 3.28)
test bench_5_rt_month_name        ... bench:          66.66 ns/iter (+/- 6.73)
test bench_5_rt_month_name_full   ... bench:          68.75 ns/iter (+/- 7.72)
test bench_5_rt_nanosecond        ... bench:          77.68 ns/iter (+/- 4.22)
test bench_5_rt_payload           ... bench:          41.69 ns/iter (+/- 4.27)
test bench_5_rt_pid               ... bench:          50.46 ns/iter (+/- 3.49)
test bench_5_rt_second            ... bench:          65.08 ns/iter (+/- 5.42)
test bench_5_rt_source            ... bench:          41.49 ns/iter (+/- 2.13)
test bench_5_rt_tid               ... bench:          49.21 ns/iter (+/- 3.86)
test bench_5_rt_time              ... bench:          78.55 ns/iter (+/- 5.45)
test bench_5_rt_time_12           ... bench:          82.25 ns/iter (+/- 13.14)
test bench_5_rt_time_short        ... bench:          74.34 ns/iter (+/- 3.33)
test bench_5_rt_tz_offset         ... bench:          66.45 ns/iter (+/- 3.56)
test bench_5_rt_unix_timestamp    ... bench:          65.93 ns/iter (+/- 5.82)
test bench_5_rt_weekday_name      ... bench:          66.85 ns/iter (+/- 10.07)
test bench_5_rt_weekday_name_full ... bench:          65.56 ns/iter (+/- 4.89)
test bench_5_rt_year              ... bench:          66.90 ns/iter (+/- 2.78)
test bench_5_rt_year_short        ... bench:          66.56 ns/iter (+/- 3.48)

test result: ok. 0 passed; 0 failed; 0 ignored; 80 measured; 0 filtered out; finished in 47.06s

cargo -Vv

cargo -Vv
cargo 1.89.0 (c24e10642 2025-06-23)
release: 1.89.0
commit-hash: c24e1064277fe51ab72011e2612e556ac56addf7
commit-date: 2025-06-23
host: x86_64-pc-windows-msvc
libgit2: 1.9.0 (sys:0.20.2 vendored)
libcurl: 8.12.1-DEV (sys:0.4.80+curl-8.12.1 vendored ssl:Schannel)
os: Windows 10.0.19045 (Windows 10 Pro) [64-bit]     

@SpriteOvO
Copy link
Owner Author

Okay, slightly improvement, since this doesn't affect any public API, so we are not in a hurry to include it in v0.5.0.

@SpriteOvO SpriteOvO force-pushed the main-dev branch 12 times, most recently from df2eff5 to 5a6c51f Compare September 30, 2025 10:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant