初心者によるRust入門 ~導入編~

# 経緯(読み飛ばしてください)
自分「最近，Pythonしか触ってない... 
　　　でも，コンパイラ言語と，スクリプト言語一つずつ位は書けた方が良いよなぁ....
　　　なんか最近，アツイの無いですか？」
クソ強エンジニア「Rustがあるで！👊」  
と，言われたので初めてみる．
どれだけ続けられるかわからないけれど，足跡を残しておくことにした．


# Rust，凄いんだってよ
Rustって言語の事を名前を聞いたことがある程度だったのでちょっとググってみた
最強のプログラミング言語である証明を見つけた()

* [Rustが最強のプログラミング言語である証明](https://hayato.io/2017/icfp-rust/)

それはさておき，下の色々な強い人たちの記事に書いてあるけど，Rustは

* 2006年にMozillaの従業員の個人的なプロジェクトから始まり，  
2009年にMozillaがスポンサーになって発表された新しめな言語  
* ポストC/C++
* 移譲や借用という概念を使って，データ競合を防いでくれる
* 賢い型推論が出来るらしい(Javaみたいに長ったらしい変数定義は嫌なんじゃ...)
* 色々な言語の良いとこ取りをしているらしい

自分は全くC++わからないので不安である

[プログラミング言語Rustのススメ](https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c)
[Rustに１００日触れてわかったこと](https://qiita.com/okeguch/items/1f9b7e6367e8292f646f)
[C++erのためのRust入門](https://qiita.com/EqualL2/items/a232ab0855f145bd5997)
[Rustは何が新しいのか](https://imoz.jp/note/rust-functions.html)


# インストール
非常に簡単．これこそ猫でもできる．
1. [インストールサイト](https://www.rust-lang.org/tools/install)に行く
2. インストーラである`RUSTUP-INIT.EXE`を入手
3. `RUSTUP-INIT.EXE`を実行
4. 下のような画面が表示されるので，(自分はdefaultで良かったので)`1`を入力して`Enter`
![キャプチャ_cut.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265473/86dac998-1805-1172-0f1b-d13353d792b9.png)
5. インストールが終わったら，コマンドプロンプトでPATHが通っていることを確認

```
rustup -V
cargo -V
```

自分の時は`rustup 1.17.0 (069c88ed6 2019-03-05)`と`cargo 1.34.0 (6789d8a0a 2019-04-01)`でした
6. インストール終わり．簡単すぎておしっこチビった．


# Hello, World!
[プログラミング言語Rustのススメ](https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c)によると，インストールして使える3つのコマンドは，

* `rustup` : インストール担当
* `rustc`  : コンパイラ担当
* `cargo`  : パッケージマネージャ担当  

らしい．そいで，重要なのは`cargo`らしい．
では早速，準備を進めていく．
　
<ol><li>以下のコマンドで新しくプロジェクトを作る．
コマンドを打ったフォルダの中にプロジェクト名のフォルダが出来るので，事前に作りたいとこに移動しておく．  

```
cargo new [プロジェクト名]
```

</li><li>その後，プロジェクト名のフォルダに移動．

```
cd [プロジェクト名]
```

</li><li>以下のコマンドを打つ

```
cargo run
```
</li><li>`Hello, world!`って表示されたんだが...
この時色々生成されており，`src/main.rs`を見ると以下の内容が記述されていた
Rustは自分でHello, World!のコードを書く必要が無いらしい，~~モダンである~~ 

```rust

fn main() {
    println!("Hello, world!");
}
```
</li></ol>

# 開発環境
書いてるときにしっかり補完や，静的チェックをして欲しいので，色々してくれるように環境を整える．
自分は良くVSCodeを使って作業をするので，VSCodeで使えるようにしていく．
色んなエディタやIDEにRustに関する情報を提供する`Rust Language Server(RLS)`が，嬉しいことにVSCode拡張機能を配布してくれているらしい．
[RLSのリポジトリ](https://github.com/rust-lang/rls)のREADMEに従って導入していく．
　　　　
<ol><li>RLSとその依存関係を簡単にインストールするのに役に立つらしい`rustup`をインストールする．
多分もうされているので最新になっているかチェックするために以下のコマンドを入力する．

```
rustup update
```

</li><li>VSCodeを開いてExtensionsタブから`Rust(rls)`と検索，インストール
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265473/f9bb49d0-97bc-550a-6dbf-7d3c0c5e0170.png)
 
</li><li>Hello, World!章で作った(何でもいいけど)RustプロジェクトをVSCodeの`File > Add Folder to Workspace...`から開く
注意：`src`フォルダではなく，`Cargo.toml`があるプロジェクト全体のフォルダを開いてください
 
</li><li>するとVSCodeからポップアップでRLSをインストールするように促されるので`Yes`を押してインストール
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265473/5a82dd99-06c0-cee5-671e-7d6faa9ab8bc.png)
 
</li><li>インストールが完了すると，VSCodeの最下段の左側に`RLS`の文字が表示されるようになります
ちゃんと補完が効いているのが確認できます
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265473/d7e2a7c0-be17-43bd-5951-900406273edf.png)

</li><li>設定などは，[VSCodeのプラグインのリポジトリ](https://github.com/rust-lang/rls-vscode)のREADMEを見ると，エディタの警告を止めるなど色々出来るらしい．
 
</li></ol>  
　

次は実際に色々書いて触ってみようと思う．
最近AtCorderをやっているので，そっちでも多少書けるようにしていきたい．


# 参考にしたサイト・記事
* [プログラミング言語Rustのススメ](https://qiita.com/elipmoc101/items/3c8b6d8332a9019e578c)
* [Rust Language Server(RLS)でVisual Studio Codeの補完を行う](https://qiita.com/skitoy4321/items/0bf6826f948720bed821)
* [Visual Studio CodeでRustのコード補完・タスク・Debug実行](https://qiita.com/kat_out/items/cf89a8dffb4e0629948a)
* [Windows環境にRust環境を構築する際のメモ](https://qiita.com/dTAT/items/91eb5df338a560f3d211)
* [Rustで競技プログラミング スターターキット](https://qiita.com/hatoo@github/items/fa14ad36a1b568d14f3e)
* [プログラミング言語Rust](https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/)
* [The Rust Programming Language(和訳)](https://doc.rust-jp.rs/book/second-edition/)
* [Rustが最強のプログラミング言語である証明](https://hayato.io/2017/icfp-rust/)
* [Rustは何が新しいのか（基本的な言語機能の紹介）](https://imoz.jp/note/rust-functions.html)
* [C++erのためのRust入門](https://qiita.com/EqualL2/items/a232ab0855f145bd5997)
* [Repository for the Rust Language Server (aka RLS)](https://github.com/rust-lang/rls)
* [RLS-based plugin for VSCode](https://github.com/rust-lang/rls-vscode)