An open API service indexing awesome lists of open source software.

https://github.com/j-tai/getargs

A truly zero-cost argument parser for Rust
https://github.com/j-tai/getargs

argument-parser argument-parsing rust

Last synced: 11 months ago
JSON representation

A truly zero-cost argument parser for Rust

Awesome Lists containing this project

README

          

# getargs

An argument parser that is truly zero-cost, similar to Unix's `getopts`.

## About

`getargs` is a low-level, efficient and versatile argument parser that
works similarly to `getopts`. It works by producing a stream of options,
and after each option, your code decides whether to require and retrieve
the value for the option or not.

You don't have to declare a list of valid options up-front, so `getargs`
does not have to allocate space for them or spend runtime searching for
them. This also means that you have to write your own help message, but
since `--help` is just another flag, there are no restrictions on what
you do with it.

## Features

* Short `-f` and long `--flag` flags
* Required implicit values `-i VALUE` and `--implicit VALUE`
* Required or optional explicit values `-eVALUE` and `--explicit=VALUE`
* Positional arguments and `--`
* Parse options at the beginning of the argument list, or anywhere

## Benefits

* Zero cost
* Zero copy
* Zero unsafe code
* Zero dependencies
* Zero allocation
* Simple to use yet versatile
* `#![no_std]`-compatible
* Compatible with `&str` and `&[u8]`

## Performance

`getargs` has had a lot of attention put into profiling and
optimization, and on a modern machine it takes under 0.2μs to parse a
short array of 12 arguments.

In our testing, `getargs` is faster than every other argument parsing
library on crates.io. Its closest competitor is `gumdrop`, which is only
~30% slower in the worst case, and its second-closest competitor is
`getopt`, which takes three times as long. Other libraries degrade
quickly; `clap` takes 45x longer. (This is not an entirely fair
comparison though, as `clap` is not just an argument-parsing library,
but an entire command-line application framework. It is perhaps
overqualified for simple tasks.)

## Example

For examples, see [the `examples` directory][./examples/] for small
programs that you can compile and run yourself to see how `getargs`
works.

## License

[MIT.](LICENSE)