ordo-one / package-benchmark

Swift benchmark runner with many performance metrics and great CI support
Apache License 2.0
326 stars 25 forks source link

Command-line interface looks slightly weird #272

Closed MahdiBM closed 1 month ago

MahdiBM commented 2 months ago

This is subjective of course, but I just wanted to put it out here that the CLI looks a bit weird to me when thinking about it, compared to other usual CLI tools like curl.

For example, this is one of the examples in the docs:

swift package benchmark baseline read <baseline> [<baseline2> ... <baselineN>] [<options>]

I would have expected this to instead be something like:

swift package benchmark baseline read -b <baseline> [-b <baseline2> ... -b <baselineN>] [<options>]

So using -b or --baseline to name the baselines, instead of just putting everything behind each other in a certain order, with no other hint (like -b) as to what they are.

Now to be fair, at least as I understand, the required options are just expected to be there without using flags like -b, and the optional stuff will need flags to be used, so I do realize that the current interface does make sense. It's just that it deviates from other common CLI tools, and also it can get hard to recognize what's going on in a command. I would prefer to have "required" flags. So e.g. baselines are declared using a flag like -b, but providing an incorrect amount of baselines results in an error.

hassila commented 1 month ago

It's inspired by zfs (https://linux.die.net/man/8/zfs) - for good or bad - don't want to revamp the CLI now as it would break various CI integrations, but will take this into consideration if we make a breaking change in the future - would probably make sense to align with swiftpm/swiftc more closely in feel then.