M.Hiroi's Home Page
http://www.geocities.jp/m_hiroi/

Linux Programming

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

[ Home | Linux ]

CONTENTS


はじめに

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

Rust は 2015 年 5 月 16 日に ver 1.0 がリリースされた新しい言語です。並列処理、関数プログラミング、オブジェクト指向プログラミングなど、最近の言語の良いところを取り入れています。ガベージコレクションはありませんが、データに「所有権」[*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 の場合、インストールは簡単です。次のコマンドを入力して画面の指示に従うだけです。

curl https://sh.rustup.rs -sSf | sh

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

sudo apt install curl

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

mhiroi@mhiroi-VirtualBox:~$ rustc --version
rustc 1.18.0 (03fc9d622 2017-06-06)

Windows の場合、rustup-init.exe をダウンロードして実行します。ただし、この方法は Visual C++ビルドツール が必要になります。このツールをインストールしたくない場合、次のページから別のインストーラをダウンロードして実行します。

x86_64-pc-windows-gnu.msi

M.Hiroi の環境では、このインストーラで Rust をインストールすることができました。

●たらいまわし関数

それでは、お馴染みの「たらいまわし関数」を使って、Rust と clang, clang++ (version 3.8.1) の実行時間を計測してみましょう。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 で時間を計測する場合、プログラムの起動時間も含まれることに注意してください。実行結果は次のようになりました。

mhiroi@mhiroi-VirtualBox:~/work$ rustc -O tarai.rs
mhiroi@mhiroi-VirtualBox:~/work$ time ./tarai
1

real	0m7.555s
user	0m7.536s
sys	0m0.000s

mhiroi@mhiroi-VirtualBox:~/work$ clang -O2 tarai.c
mhiroi@mhiroi-VirtualBox:~/work$ time ./a.out
1

real	0m7.788s
user	0m7.768s
sys	0m0.004s

mhiroi@mhiroi-VirtualBox:~/work$ clang++ -O2 tarai.cpp
mhiroi@mhiroi-VirtualBox:~/work$ time ./a.out
1

real	0m7.753s
user	0m7.744s
sys	0m0.000s

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


参考文献, URL

  1. プログラミング言語 Rust, (本家, 日本語版)
  2. プログラミング言語Rust, (入門書, 日本語)
  3. Rust by Example, (サンプルスクリプト集, 日本語)
  4. 最速で知る! プログラミング言語Rustの基本機能とメモリ管理【第二言語としてのRust】, (κeen さん)
  5. 実践的なアプリケーションを書いてみよう! Rustの構造化プログラミング【第二言語としてのRust】, (κeen さん)
  6. 関数型プログラマのためのRust, (Raphael ‘kena’ Poss さん, 日本語訳)
  7. Rustは何が新しいのか(基本的な言語機能の紹介), (Kentaro Imajo さん)
  8. Rust (プログラミング言語) - Wikipedia

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

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

Copyright (C) 2017 Makoto Hiroi
All rights reserved.

[ Home | Linux ]