Rustコトハジメ

プログラミング言語Rustと競プロに関する情報をお届けします。

cargo-snippetがRustを最高にする

競技プログラミングでは、提出物として一枚のソースコードにすべてを詰めることを要求されます。だから、ふつうは自分なりのライブラリを作って、それをコピペして使うことになります。まずはテンプレートを貼り付けて、それから使うライブラリを貼り付けて、時には少し修正したりして、問題を解きます。たぶん多くの人は、まじめにCtrl-C Ctrl-Vでしていると思います。

Rustにはcargo-snippetというツールがあり、これによってライブラリ作成が楽になります。パーサを使ってソースコード解析をして、snippetというディレクティブをつけたところを拾って出力しているという仕組みではないかと思います。設定によって各種エディタ向けのスニペットを吐くことが出来ます。私はVSCode向けを使っています。

qiita.com

Rustでは、一つのrsファイルはモジュールとみなされます。そしてその中にライブラリコードとテストコードを並べて書くことが出来ます。testディレクティブをつけたものはテストとみなされて、cargo testで実行することが出来ます。私は今勉強として、ALDSや蟻本に書いてあるアルゴリズムをライブラリとして実装していますが、この仕組みのおかげで開発がすごく楽です。

さらに、スニペットを作るためにはsnippetディレクティブをつけるだけで済むので、再利用もしやすいです。例えば、クラスカル法では、それ自体がライブラリとしてunion findを使いますが、両方を一発で取り込むことが出来ます。

私のライブラリは以下です。ただ本に書いてあることを実装している段階なので、見る価値はないと思いますが、Rustでアルゴリズムを実装するにあたってC++と同じ具合にいかず嵌ったことはあるため、その知見はまた別の機会に共有するつもりです。

GitHub - akiradeveloper/rust-comp-snippets