-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
improve std bench
and add significant-digits
#859
Conversation
I will add tests to |
Dear maintainers, please, take a look. I think it is ready for review |
I like it. Thanks! |
i have a question: when |
generally, i would say that all these changes are nice improvements but pretty much out of the scope of
bench { sleep 0.1sec; 1 + 2 } --rounds 5 --verbose # the current `std bench` command
| reject times # same as not using `--list-timings` in your implementation
| bench format --units ms --sign-digits 2 # same as your `--units` and `--sign-digits` of course, that's my way of thinking, i like commands that do one thing 😌 |
@amtoine, I understand your concern! I really envisioned this and spent a number of hours polishing my proposal before submitting it. My motivation was to create a more convenient function with better defaults. My motivation comes from the perspective of a non-developer, for whom typing every symbol is much more effortful than for a seasoned professional like you (who might be the target audience for Maybe you would agree with me that this representation is very wordy and unnecessary, even for a professional?
And times are expaneded by default with my settings. Perhaps we can:
and not introduce any new options and flags to @amtoine What do you think? |
|
yeah, the target audience of
maybe, but then i would argue the issue comes from the formatting nushell does on durations, not from
again, that's not the fault of
again, these are just my two cents, i would not die on that, it's not critical 😌 |
@amtoine thank you for explaining. I just leave my opinion here without intention of convincing you. I won't die either if my proposal won't be accepted, no worries :)
AFAIK there is no easy way to format durations in the all record fields now.
I have intuition, that users will need to write
|
🙏
❤️
i took out my wizard wand and found a solution to this 😉 bench -n 10 {sleep 0.1sec} | reject times | format duration ms ...($in | columns)
true, but that last command is precisely what |
that is cool! thank you, @amtoine! 🙏
|
@amtoine gave me valuable feedback about the [PR of `std bench` improvement](#859) CANDIDATE into `stdlib-candidates`. I understood and respected his reasoning about his position. Yet, I still believe that users of `std bench` will benefit from my proposal. I incorporated some of @amtoine advice in this PR. I removed the `bench --units` option as I now believe it is better to encourage users to use core functionality for formatting duration (which I had not thought of initially) and to avoid multiplying `--options`. ``` bench -n 10 {sleep 0.1sec} | format duration ms mean min max stddev # or bench -n 10 {sleep 0.1sec} | format duration ms ...($in | columns) ``` Also, I removed the option of `--sign-digits` and just hard-coded the precision of conversion to the fourth significant digit (which will give a maximum relative error of 0.05%, which I still think is unnecessarily precise). To explain my motivation, I added some context from our previous conversation: >> Maybe you would agree with me that this representation is very wordy and unnecessary, even for a professional? >> `1sec 333ms 333µs 333ns` > maybe, but then i would argue the issue comes from the formatting nushell does on durations, not from std bench, it's just that Nushell will show every part of the duration 😕 And I add here that if Nushell adds the setting for resetting insignificant digits from displaying, those conversions could be removed for the better. Yet, we don't have such a setting yet, but we already use bench and use it quite often. So, I propose this usability improvement. In my defense, I would add that the existing `--pretty` option will only benefit from the proposed changes (while it can't benefit from `| format duration ms`). ```diff > bench {sleep (10sec / 3)} --rounds 2 --pretty - 3sec 335ms 974µs 264ns +/- 1ms 108µs 748ns + 3sec 335ms +/- 1ms 108µs ``` Finally, I kept the `--list-timings` option because I strongly believe that users much more often will not need expanded 50 lines of timing results on their screen (which they can get rid of by adding `| reject time` in the second execution of the `bench` command - but I would like to avoid this second execution). I won't be hurt if my proposed changes aren't accepted and applied to mainstream. Yet, I feel like my initial PR is still valuable and will benefit from my current PR's additions.
Hi! I propose several changes to
std bench
:--sign-digits=0
).--list-timings
).For removing insignificant precision, I needed a new command
significant-digits
which is also included in this PR. This command has tests.