Skip to content

Commit 18ab521

Browse files
committed
Brush up the AtCoder installation chapter
1 parent c1893b5 commit 18ab521

File tree

6 files changed

+72
-37
lines changed

6 files changed

+72
-37
lines changed

src/atcoder-env/compiling-and-running-program.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@
33
# コンパイルコマンドと実行コマンド
44

55
**TODO** このページは書きかけです。
6+
7+
8+
## コンパイルオプションについて
9+
10+
**TODO**

src/atcoder-env/index.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
# AtCoder運営者向けの情報
44

5-
**TODO** このページは書きかけです。
6-
75
本章では以下の内容について説明します。
86

97
- Rustツールチェインやクレート(外部ライブラリ)をジャッジサーバへインストールする手順
108
- 提出されたプログラムのコンパイルおよび実行手順
119

10+
内容について質問などがありましたら、[GitHub Issue][gh-issue]などでご連絡ください。
11+
12+
[gh-issue]: https://github.com/rust-lang-ja/atcoder-rust-resources/issues

src/atcoder-env/installation.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
# インストール
44

5-
**TODO** このページは書きかけです
5+
本節では以下の内容について説明します
66

77
- Rustツールチェインのインストール
8-
- クレート(外部ライブラリ)のビルドとインストール
9-
- クレートの検索パス生成プログラムのビルドとインストール
8+
- クレート(外部ライブラリ)のコンパイルとインストール
9+
- クレートの検索パス生成ツールのインストール
1010
- インストール後の動作確認

src/atcoder-env/installing-rust-crates.md

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,49 @@
11
<!-- -*- coding:utf-8-unix -*- -->
22

3-
# Rustクレート(外部ライブラリ)のビルドとインストール
3+
# クレートのコンパイルとインストール
44

55
本ページではAtCoderのジャッジサーバにRustの外部ライブラリであるクレートをインストールする手順を説明します。
66

77

88
## インストールするクレートについて
99

10-
今回インストールの対象となるクレートは、Slack上のRust日本語コミュニティ「rust-jp」のメンバーによって選定されました。
10+
今回インストールするクレートは、SlackのRust日本語コミュニティ「rust-jp」のメンバーがAtCoderでぜひ使いたいと考えているものです。
11+
大半は既存のクレートですが、この機会に新たに開発したものもあります。
1112

12-
選定にあたって、以下の点を重視しました
13+
これらのクレートは主に以下の種類に分類されます
1314

14-
- 他のいくつかの言語の標準ライブラリにあって、Rustにない機能
15-
- 例:C++の`lower-bound``BitSet`に相当する機能
15+
- 他のいくつかの言語の標準ライブラリにあって、Rustにない機能を提供するもの
16+
- 例:C++の`lower_bound``BitSet`に相当する機能
1617
- 競技プログラミングの面白さを損なわない範囲(ズルにならない範囲)で便利になるもの
17-
- 例:Rustでは入出力関連の記述が煩雑になりがちなので、それらを簡潔に記述できるマクロ
18-
- セキュリティなどの理由から高速性が犠牲になっている機能の置き換え
18+
- 例:Rustでは入出力関連の記述が煩雑になりがちなので、それらを簡潔に記述できるマクロ集
19+
- セキュリティなどの理由から高速性が犠牲になっている機能を置き換えるもの
1920
- 例:標準ライブラリのハッシュ関数はDoS攻撃を避けるために暗号強度があり、計算量が多い。
20-
競技プログラミングでは暗号強度は求められず、より計算量が少ないハッシュ関数で十分
21+
競技プログラミングでは暗号強度は求められず、より計算量の少ないハッシュ関数で十分
2122

22-
対象クレートの一覧は このページ(**TODO**) にあります。
23-
導入して問題がないか、インストール前にレビューをお願いいたします。
23+
**AtCoder運営者様へのお願い**
2424

25-
質問などがありましたら、[GitHub Issue][gh-issue]などでご連絡ください。
25+
対象クレートの一覧は このページ(**TODO**[仮のページはこちら](https://github.com/rust-lang-ja/atcoder-rust-resources/wiki/Crates-2019)) にあります。
26+
インストールして問題がないか、事前にレビューをお願いいたします。
27+
28+
質問や要望などがありましたら、[GitHub Issue][gh-issue]などでご連絡ください。
2629

2730
[gh-issue]: https://github.com/rust-lang-ja/atcoder-rust-resources/issues
2831

2932

3033
## ファイルレイアウトとクレートの事前コンパイル
3134

35+
インストール作業に入る前に、背景を説明します。
3236
一般的な`cargo`を使用した開発では、`Cargo.toml`という設定ファイルに依存クレートの情報を記述します。
3337
`cargo build`コマンドを実行すると、`cargo`はそれらのクレートのソースコードをダウンロードし、適切なオプションと共に`rustc`を実行することでクレートをコンパイルします。
34-
クレートのソースコードは`$CARGO_HOME/registory/cache`にダウンロードされ、コンパイル済みのクレート(`rlib`ファイル)は`Cargo.toml`が置かれたディレクトリを起点とする相対ディレクトリ`./target/release/deps`配下に出力されます。
38+
クレートのソースコードは`$CARGO_HOME/registory/src`にダウンロードされ、コンパイル済みのクレート(`rlib`ファイル)は`Cargo.toml`が置かれたディレクトリを起点とする相対ディレクトリ`./target/release/deps`配下に出力されます。
3539

3640
**一般的な開発時のファイルレイアウト**
3741

3842
```console
3943
$HOME # ユーザのホームディレクトリ
4044
|-- $CARGO_HOME (~/.cargo)
4145
| └-- registory
42-
| └-- cache
46+
| └-- src
4347
| └-- クレートのソースコード
4448
|
4549
└-- my-package
@@ -58,16 +62,15 @@ $HOME # ユーザのホームディレクトリ
5862
もしジャッジサーバでこの方法をとると、ジャッジの際のサーバ負荷が増えてしまいます。
5963

6064
そこで今回は各ファイルを以下のように配置し、クレートのコンパイルは導入時に済ませておくことにします。
61-
またダウンロードしたクレートのソースコードはコンパイル後は不要ですので削除します。
6265

6366
**AtCoderジャッジサーバでのファイルレイアウト(導入時に配置するもの)**
6467

6568
```console
6669
$RUST_HOME (/usr/local/lib/rust)
6770
|-- $CARGO_HOME (/usr/local/lib/rust/cargo)
6871
| └-- registory
69-
| └-- cache
70-
| └-- クレートのソースコード (コンパイル後に削除する)
72+
| └-- src
73+
| └-- クレートのソースコード
7174
└-- lib
7275
|-- Cargo.toml # 設定ファイル。依存クレートの情報が書かれている
7376
└-- target
@@ -91,9 +94,11 @@ $HOME # ユーザのホームディレクトリ
9194

9295
## クレートのコンパイルに使用するCargoパッケージのダウンロード
9396

94-
それではインストールしましょう
97+
それではインストール作業に入りましょう
9598
クレートの事前コンパイルに使用するCargoパッケージをGitHubからダウンロードし、`/usr/local/lib/rust/lib`に配置します。
96-
このパッケージには`Cargo.toml`ファイルなどが含まれており、対象となるクレートがあらかじめ設定されています。
99+
このパッケージには`Cargo.toml`ファイルなどが含まれており、インストール対象のクレートがすでに設定されています。
100+
`[dependencies]`セクションに書かれています)
101+
97102
以下のコマンドを実行します。
98103

99104
```console
@@ -107,11 +112,10 @@ root
107112

108113
## Cargoパッケージをgit cloneする
109114
# git clone https://github.com/rust-lang-ja/atcoder-rust-base.git \
110-
--branch ja-full --single-branch \
115+
--branch ja-all-enabled --single-branch \
111116
${RUST_HOME}/lib
112117
```
113118

114-
依存クレートの情報は`Cargo.toml`ファイルの`[dependencies]`セクションに書かれています。
115119

116120

117121
## クレートのコンパイル
@@ -120,15 +124,14 @@ root
120124
以下のコマンドを実行します。
121125

122126
```console
123-
# cd ${RUST_HOME}/lib
127+
# cd $RUST_HOME/lib
124128
# cargo build --release
125129
```
126130

127131
コンパイルに成功すると以下のように表示されます。
128132

129133
```console
130134
# cargo build --release
131-
Compiling autocfg v0.1.4
132135
...(中略)...
133136

134137
Finished release [optimized] target(s) in 1m 39s
@@ -143,4 +146,3 @@ $ find target/release/deps/ -name '*.rlib' | wc -l
143146
58 # この数字を確認
144147
```
145148

146-
なお、`$CARGO_HOME/registory/cache`の内容は、次のページの作業が終わった後に削除します。

src/atcoder-env/installing-rustc-dep-option-generator.md

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
11
<!-- -*- coding:utf-8-unix -*- -->
22

3-
# クレート検索パス生成プログラムのビルドとインストール
3+
# クレート検索パス生成ツールのインストール
44

5-
**TODO** このページは書きかけです
5+
前のページで以下のことを説明しました
66

7-
- `rustc-dep-option-generator`コマンドをビルドしてインストールします。
7+
> ジャッジの際には、`cargo`を使用せず、`rustc`に適切なオプション(ライブラリ検索パスなど)を与えて実行することで、事前にコンパイルしておいた`rlib`ファイルとリンクさせます。
8+
9+
本ページではこの`rustc`のコマンドライン・オプションを生成するツールである`rustc-dep-option-generator`のインストール手順を説明します。
10+
このツールはRustで書かれています。
811

912

1013
## 依存ソフトウェアのインストール
1114

12-
ツールのビルドに必要なシステムライブラリをインストールします
15+
ツールが依存するシステムライブラリをインストールします
1316

1417
```console
1518
$ sudo apt update
1619
$ sudo apt install -y libssl-dev
1720
```
1821

22+
なお`libssl-dev`はツールが依存しているクレートの1つが要求しているためにインストールしますが、このツールではその機能は使いません。
23+
ツール実行時のネットワーク・アクセスは不要です。
24+
25+
26+
## ツールのインストール
1927

20-
## ツールのビルドとインストール
28+
`cargo install`コマンドでインストールします。
29+
以下のコマンドを実行すると、GitHubのリポジトリからツールのソースコードがダウンロードされ、ビルドが実行されます。
30+
ビルドに成功すると、生成されたバイナリ(実行可能ファイル)が`$CARGO_HOME/bin`配下にインストールされます。
2131

2232
```console
2333
$ sudo -i
@@ -28,7 +38,7 @@ root
2838
# cargo install --git https://github.com/rust-lang-ja/atcoder-rustc-dep-option-generator.git
2939
```
3040

31-
ビルドとインストールに成功すると以下のように表示されます
41+
インストールの成功時は以下のように表示されます
3242

3343
```console
3444
# cargo install --git https://github.com/rust-lang-ja/atcoder-rustc-dep-option-generator.git
@@ -44,8 +54,12 @@ root
4454
Installing /usr/local/lib/rust/cargo/bin/rustc-dep-option-generator
4555
```
4656

57+
4758
## インストール後の動作確認
4859

60+
ツールが動作することを確認しましょう。
61+
以下のコマンドを実行します。
62+
4963
```console
5064
## 一般ユーザで実行
5165
$ which rustc-dep-option-generator
@@ -56,10 +70,18 @@ $ echo $RUST_HOME
5670

5771
$ export RUST_LIB=${RUST_HOME}/lib
5872
$ rustc-dep-option-generator ${RUST_LIB}/Cargo.toml ${RUST_LIB}/target/release/deps
59-
...
73+
--extern arrayvec=/usr/local/lib/rust/lib/target/release/deps/libarrayvec-cc9c39e9e371e142.rlib
74+
--extern hashbrown=/usr/local/lib/rust/lib/target/release/deps/libhashbrown-106405935e6124e3.rlib
75+
...(中略)...
76+
-L dependency=/usr/local/lib/rust/lib/target/release/deps
6077

6178
## ↑ Errorの文字が表示されなければOK
79+
##
80+
## エラーの例
81+
## Error: StringError("failed to find appropriate path for /arrayvec-0.4.10/")
6282

6383
$ echo $?
64-
0
84+
0 # 0ならOK
6585
```
86+
87+
これでインストール作業は終了です。

src/atcoder-env/supported-environment.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!-- -*- coding:utf-8-unix -*- -->
22

3-
# 本書が想定する環境と利用形態
3+
# 本章で想定している環境と利用形態
44

55
**TODO** このページは書きかけです。
66

@@ -29,3 +29,8 @@
2929
- プログラムが作成したファイルはテストケースの実行ごとに削除される
3030
- ユーザプログラムをコンパイル・実行するLinuxユーザは、単一のユーザなのか、複数のユーザなのかは不明
3131
- 本書では複数ユーザの場合でも対応できるよう、Rustツールチェインやクレートを、ジャッジサーバ上の全Linuxユーザがread-onlyでアクセスできる場所(`/usr/local/lib/rust`)にインストールする
32+
33+
34+
## 一般的なRust開発環境との違い
35+
36+
**TODO**

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy