tanakh / cargo-atcoder

Cargo subcommand for AtCoder
BSD 3-Clause "New" or "Revised" License
397 stars 36 forks source link

Support workspaces #36

Closed qryxip closed 4 years ago

qryxip commented 4 years ago

Closes #35. Fixes #39. (readmeいじったときに修正してしまった。分離するのも面倒だしそのままで)

qryxip commented 4 years ago

Done!

qryxip commented 4 years ago

以下を除き既存の動作には影響がないはずです。

qryxip commented 4 years ago

Fixes #39. (readmeいじったときに修正してしまった。分離するのも面倒だしそのままで) first commentに書かないとlinkされないらしい

qryxip commented 4 years ago

readmeでは「プロジェクト」という単語をすべて「パッケージ」に置き換えました。 Rustでは"project"は"another name for a package"とされていて公式ドキュメントでも頻繁に使われていますが、今回の場合 workspaceと混同しないかなと思ったので。

qryxip commented 4 years ago

提出も問題無く動きます。

submit

あとpackage.metadata.cargo-atcoderをこのようにすればAtCoder Problemsのvirtual contest機能で楽に使えるのでは?というアイディアが浮かんできました。

[package.metadata.cargo-atcoder.problems]
a = { bin = "abc126-a", screen-name = "abc126_a", contest = "abc126" }
b = { bin = "abc126-b", screen-name = "abc126_b", contest = "abc126" }
c = { bin = "abc126-c", screen-name = "abc126_c", contest = "abc126" }
d = { bin = "abc126-d", screen-name = "abc126_d", contest = "abc126" }
e = { bin = "abc126-e", screen-name = "abc126_e", contest = "abc126" }
f = { bin = "abc126-f", screen-name = "abc126_f", contest = "abc126" }
qryxip commented 4 years ago
qryxip commented 4 years ago
qryxip commented 4 years ago
qryxip commented 4 years ago
qryxip commented 4 years ago

このPR、closeしようと思います。私個人はcargo-competeを作って今はそれを使っていますし、この機能はcargo-atcoderにそぐわないんじゃないかなと思い始めたので。

  1. 大量のパッケージを一つのworkspaceに押し込めると流石に重くなるし、その時々でworkspace memberを絞るというのも面倒。

    Screenshot

    cargo-competeでは一つのパッケージに"focus"してその他を"deactivate"するオプションを入れているけど「切り替え」が面倒。

    Rust、というよりCargoに慣れていない人でも容易に扱えるような良い方法が思いつかない。

  2. [[bin]]のリネームにより、プロジェクトの状態がわかりにくくなる。

    [package.metadata.cargo-atcoder.problems]
    a = { bin = "abc100-a" }
    
    [[bin]]
    name = "abc100-a"
    path = "./src/bin/a.rs"

    またcargo run --binも少しだけ面倒になる。

    -$ cargo run --bin a
    +$ cargo run --bin some-contest-a
  3. 「以前の動作」を可能なままにしてあるが、READMEを上手く書かないと二種類の動作をすることについて混乱をもたらしそう。

  4. 1., 2., 3.によりRust初学者が混乱する。初学者にとっては、些細なものだとしてもトラブルに遭遇する機会は無ければ無いほど良い。「使い方がわからない」より「使えるけどコンテストの度に数分ビルドが必要」のほうが圧倒的にまし。