5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rustに入門してみた

Posted at

新しいプログラミング言語に触れてみようと思い、Rustにチャレンジしてみました。2020年で最も人気にあるプログラミング言語となったそうですね。infoQ:Rustが最も人気のあるプログラミング言語トップ20に

Rustの特徴

  • 高速な実行環境
  • 安全な文法
  • Performance、Reliability、Productivityの3つに力を入れたシステムプログラミング言語

利用例

1. 準備

Hello, Worldを実行できるようにWindows環境上にRustの実行環境を用意してみます。

試した環境

  • Windows ver.1903
  • Visual Studio Code 1.49.1
  • Rust 1.46.0

セットアップ

  1. Microsoft C++ Build Toolsをインストール
  2. Rustをインストール
  • CUIでインストールが進みます。
  1. Visual Studio CodeでのRust用拡張機能をインストール

2. 実際に実行する

Hello Worldを試す

cargo newコマンドを利用してRustのパッケージを作ります。

コンソール
> cargo new hello
```

できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34410/82f4d98b-33dd-f0de-500c-85346f2588e6.png)

`cargo run`コマンドでコンパイルをして実行!

```console:コンソール
> cd hello
> cargo run
   Compiling hello v0.1.0 (D:\Develop\code-writing\rust\hello)  
    Finished dev [unoptimized + debuginfo] target(s) in 1.22s
     Running `target\debug\hello.exe`
Hello, world!
```

## for文のプログラム
for文と関数を使ったプログラムを書いてみます。

```rust:hello.rs
fn main() {
    for i in 1..=10 {
        println!("Hello, {} world!", to_ordinal_string(i));
    }
}

fn to_ordinal_string(n: usize) -> String {
    let s = match n % 10 {
        1 => "st",
        2 => "nd",
        3 => "rd",
        _ => "th",
    };
    format!("{}{}", n, s)
}
```

リリースモードでコンパイルして実行してみました。

```console:コンソール
> cargo run --release
   Compiling hello v0.1.0 (D:\Develop\code-writing\rust\hello)
    Finished release [optimized] target(s) in 0.67s                                      
     Running `target\release\hello.exe`
Hello, 1st world!
Hello, 2nd world!
Hello, 3rd world!
Hello, 4th world!
Hello, 5th world!
Hello, 6th world!
Hello, 7th world!
Hello, 8th world!
Hello, 9th world!
Hello, 10th world!
```
## イミュータブル、参照による所有権の借用
Rustの特徴である標準で変数がイミュータブル(不変)であること、所有権という概念についてもコードを書いてみました。

```rust:hello.rs
fn main() {
    // イミュータブル、不変でエラーとなる
    // let x = 1;
    // x = x + 1;
    //
    // ミュータブル、可変
    let mut x = 1;
    x = x + 1;
    println!("{}", x);

    //シャドーイング
    let y = 1;
    let y = y + 1;
    println!("{}", y);

    //参照による所有権の借用
    let s = "Welcome to Japan".to_string();
    myprint(&s);
    myprint(&s); // 共有参照のため2回目にアクセスしても大丈夫
}

fn myprint<T: std::fmt::Display>(msg: &T) {
    print!("{}", msg);
}
```

上記のようにRustでは所有権の概念を使い不要なメモリ領域を開放しているため、Javaなどの他言語にあるようなGC(ガベージコレクション)による速度低下や、CやC++にあるメモリ開放漏れによるメモリーリークが発生しない安全な仕組みを実現しています。

ミュータブルな変数はプログラミングスタイルになれないと最初は難しいですが、先に挙げたVSCodeの拡張機能を入れておけば、静的にコード解析をしてくれるため、随時エラーをあげてくれます。それで段々慣れていくことが出来そうですね。

# まとめ
今回はRustに入門してみました。
コーディングを始めるまでの環境準備や、最初の実行などにはまることもなく、すんなりスタートすることができて、快適でした。参考図書の本を開いて、文章込みでここまでで1時間くらいでしょうか。一番時間がかかったのが、C++ Build Toolsのインストール時間だったと思います。

# 参考図書
- [Software Design (ソフトウェアデザイン) 2020年6月号](https://amzn.to/3cd7dHH)
 - ちょっと試してみたいときのSDの特集はとても助かりますね。いつもありがとうございます。  

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?