M.Hiroi's Home Page

Linux Programming

お気楽 Rust プログラミング超入門

[ Home | Linux ]

WHAT'S NEW


CONTENTS


はじめに

Rust は Mozilla によって開発されているシステムプログラミング用のプログラミング言語です。C/C++ と同じく、プログラムはネイティブコードにコンパイルされ、実行速度も C/C++ に匹敵するといわれています。これはあとで試してみましょう。

Rust は 2015 年 5 月 16 日に ver 1.0 がリリースされた新しい言語です。それ以降、6 週間間隔で定期的にリリースされていて、2022 年 7 月時点での最新バージョンは 1.62.1 です。並列処理、関数プログラミング、オブジェクト指向プログラミングなど、最近の言語の良いところを取り入れています。ガベージコレクションはありませんが、データに「所有権」[*1] という概念を導入することで、効率的で安全性の高いメモリ管理を行うことができるそうです。

M.Hiroi は Rust のことを C++ と同じく何でもできるプロフェッショナルツールという印象を持っています。メモリ管理のほかにも難しいところがたくさんあるとは思いますが、Rust は新しい言語なので、C++ よりも学習しやすいのではないか、と期待しています。

M.Hiroi は Rust でプログラムを作るのは初めてです。本稿では、簡単なプログラムを作りながら Rust を勉強していきたいと思っています。まあ、初心者が作るプログラムなので、Rust らしいプログラムは書けないと思います。間違いやお気づきの点がありましたら、メールでご指摘いただけると助かります。本稿は M.Hiroi の「覚え書」にすぎません。たいしたことはできませんが、よろしければお付き合いくださいませ。

-- note --------
[*1] C++ (2011 年に制定された C++11) にも「所有権の移動 (ムーブセマンティクス, Move Semantics)」があります。興味のある方は、拙作のページ C++ 超入門: 右辺値参照 をお読みくださいませ。

●インストール

Rust は次のページからインストールすることができます。

Ubunts 系の OS の場合、インストールは簡単です。Ubunts 18.04 (Windows Subsystem for Linux, WSL) であれば、上記ページに書いてあるように、次のコマンドを入力して画面の指示に従うだけです。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

curl (cURL) は URL シンタックスを用いてファイルを送信または受信するコマンドラインツールです。次のコマンドでインストールすることができます。

sudo apt install curl

その後、シェルで rustc --version が実行できればインストールは成功です。rustc は Rust のコンパイラです。

$ rustc --version
rustc 1.62.1 (e092d0b6b 2022-07-16)

●たらいまわし関数

それでは、お馴染みの「たらいまわし関数」を使って、Rust と clang, clang++ (version 6.0.0) の実行時間を計測してみましょう。Rust の場合、たらいまわし関数は次のようになります。

リスト : たらいまわし関数 (tarai.rs)

fn tak(x: i32, y: i32, z: i32) -> i32 {                                         
    if x <= y {                                                                 
        z                                                                       
    } else {                                                                    
        tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y))               
    }                                                                           
}                                                                               
                                                                                
fn main() {                                                                     
    println!("{}", tak(24, 12, 0));                                             
}          

Rust の拡張子は .rs です。時間計測はコマンド time を使います。time で時間を計測する場合、プログラムの起動時間も含まれることに注意してください。実行結果は次のようになりました。

$ rustc -O tak.rs
$ time ./tak
1

real    0m7.502s
user    0m7.422s
sys     0m0.031s
$ clang -O2 tak.c
$ time ./a.out
1

real    0m7.509s
user    0m7.438s
sys     0m0.016s
$ clang++ -O2 tak.cpp
$ time ./a.out
1

real    0m7.582s
user    0m7.422s
sys     0m0.031s

Rust は C/C++ とほぼ互角の速度を叩き出しています。Rust がこんなに速いとは驚きました。興味のある方はいろいろ試してみてください。


参考文献, URL

  1. プログラミング言語 Rust, (本家, 日本語版)
  2. Rustの日本語ドキュメント
  3. The Rust Programming Language 日本語版, (入門書)
  4. Rust by Example 日本語版, (サンプルスクリプト集)
  5. 関数型プログラマのためのRust, (Raphael ‘kena’ Poss さん, 日本語訳)
  6. Rustは何が新しいのか(基本的な言語機能の紹介), (Kentaro Imajo さん)
  7. Rust (プログラミング言語) - Wikipedia

『お気楽 Rust プログラミング超入門』の著作権は筆者「広井誠 (Makoto Hiroi)」が保持します。無断使用や無断転載は禁止いたします。『お気楽 Rust プログラミング超入門』で作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は出典を明記してくださるようお願いいたします。

ただし、ドキュメントの内容とプログラムは無保証であり、利用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi)」は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。

Copyright (C) 2017-2022 Makoto Hiroi
All rights reserved.

初版 2017 年 7 月 2 日
改訂 2022 年 7 月 30 日

[ Home | Linux ]