Clap-3.0だとStructOptが要らなくなるのでclap-3.0.0-beta.1をちょっと試してみた。

1. PathBufの取扱いの違い

StructOptでは問題なくオプションになる以下のフィールドは、

   #[structopt(long = "result", default_value = "", parse(from_os_str))]
   pub result: PathBuf,

Clapでは引数が指定されてないエラーを起こしてしまう。 default_valueを空以外にすれば直るのだが、それは困る、Optionでくるむことにした:

    #[clap(long = "result")]
    pub result: Option<PathBuf>,

これで解決するのだが、なんかスマートではない。

2. StructOpt::from_iterがない

これはClap::prase_fromに置き換えることが必要(そもそも、これを内部で呼び出しているだけ)。 もう一つ書き替えがあったのでまとめると、以下の通り。

依存関係

clapがstructoptを取り込んだようなものなので、基本は変化がないはず。 しかし、開発時期の違いだろうか、依存クレートにバージョンの違いが見られる。 またclapのメジャーバージョンアップということでcurses的なものに変化があった(共通部は省略):

$ cargo tree 
splr v0.4.2-dev.1
└── structopt v0.3.14
    ├── clap v2.33.1
    │   ├── ansi_term v0.11.0
    │   └── strsim v0.8.0
    └── structopt-derive v0.4.7
        └── proc-macro-error v1.0.2
            └── proc-macro-error-attr v1.0.2
$ cargo tree 
splr v0.4.2-dev.0
└── clap v3.0.0-beta.1
    ├── clap_derive v3.0.0-beta.1
    │   └── proc-macro-error v0.4.12
    │       └── proc-macro-error-attr v0.4.12
    ├── indexmap v1.4.0
    │   [build-dependencies]
    │   └── autocfg v1.0.0
    ├── os_str_bytes v2.3.1
    ├── strsim v0.10.0
    └── termcolor v1.1.0

でコンパイルしてみるとclapを使った方が(strip後のサイズで)70KBほど大きくなってしまう。 うーん、それはどうなのか。。。

コンパイル時間や実行時間に関しては見ていない。多分大きな差はないだろう。