特徴
もともとRustのコンパイラはOcamlで書かれていた。C++での移譲(ムーブセマンティクス)での問題、変数の参照やポインタでの問題を解決。
Rustでは、代入演算子を明示的にコピー可能と指定しない限り、移譲で行われるようになり、移譲された変数へのアクセスは、コンパイル時に防がれるようになった。
また借用という概念を用いて、すでに解放された変数へのアクセスが起きないようにした。
Rustの特徴として、ゼロコスト抽象化というものがあります。抽象化とは、メモリの番地に名前をつけて変数として扱えるようにすることや、複数のプログラムモジュールから共通する機能を抜き出して一つのモジュールにまとめること、同じ呼び出し規約で複数の異なるプログラムを呼び出せることなどのソフトウェアの設計・開発やプログラミングの概念で、Rustは抽象化を機能させるために安全性とスピードに焦点を合わせ、コストをできる限り小さくするよう設計されているそうです。
最初は厳しいボローチェッカー先生にビシバシしごかれる。それほど安全性を重視している。
と概念ばかり先に読むと、難しく感じてしまうので、とりあえず使ってみましょう。インストールは公式ドキュメントに沿って、自分のパソコン・OSにあったやり方でインストールしましょう。私はLinuxを使用しているので、以下のコマンドでインストールできました。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
そして環境変数を設定します。私の場合は.profile
に以下を追記しました。export PATH="$HOME/.cargo/bin:$PATH"
Hello, world!
さて、無事インストールできたらさっそく恒例のHello world!を試してみましょう。$ mkdir myproject
$ cd myproject
myprojectディレクトリにとりあえずmain.rs
という名前でファイルを作成し、以下の内容を記述します。fn main() {
println!("Hello world!");
}
fn
は、functionの略。Rustで関数はこのように書きます。そして、必ず必要なmain
関数。私は最初println!
を見た時「プリントイン!」と思っていましたが「アイ」ではなく「エル」でした。「プリントライン」だそうです。ビックリマーク「!」がついていますが、Rustではマクロを表しています。またRustでは文字列型の場合はダブルクオートを使います。シングルクオートはcharつまり文字型となります。
そして以下のコマンドでコンパイルされ、実行可能なmainが作成されます。
myproject/$ rustc main.rs
myproject/$ ls
main main.rs
あとは以下のようにして実行します。myproject/$ ./main
Hello world!
上記のような簡単なものだとrustcでもよいですが、RustにはCargoというパッケージ管理のためのものが用意されています。Cargoは、コードのビルド・ライブラリのダウンロードとビルドという3つを管理します。また構文やエラーなどのチェックができたり、テストができたりしますので、Cargoを使ったほうが何かと便利です。$ mkdir myproject
$ cd myproject
myproject/$ cargo new hello
Created binary (application) `hello` project
myproject/$ ls
hello
myproject/$ cd hello
myproject/hello/$ ls
Cargo.toml src
myproject/hello/$ cargo run
Compiling hello v0.1.0 (file:///path/to/myproject/hello)
Finished dev [unoptimized + debuginfo] target(s) in 5.75 secs
Running `target/debug/hello`
Hello, world!
以前まで、cargo new hello --bin
というコマンドで、main.rs
が作成され、cargo new hello
で、lib.rs
が作成されていましたが、現在はcargo new hello
とcargo new hello --lib
になりました。実は、作成されたmain.rsはデフォルトでHello, world!プログラムが記述されています。また同時に作成されるCargo.tomlには、コンパイル時に必須となる情報(name, version, authors)や依存(dependencies)を記述することになりますが、gitをすでにお使いの方は、そちらをもとに作成されるので、authersにはgitの設定の名前とメールアドレスが自動で記述されます。
ローカルでBookを読む
Rustはインストールの際に、実は公式ドキュメントである「The Rust Programming Language」略称TRPLが一緒についてきます。ですので、勉強しようと思っている方や勉強中の方にとっては大変ありがたいことです。表示方法は簡単です。以下のコマンドで表示されます。$ rustup doc --book
BookはTRPLです。2019年には日本語に翻訳された書籍が出版されました。詳しくはこちらの記事をご覧ください。また
$ rustup doc --std
とすることで、各型や標準モジュールなどの説明を見ることができます。それぞれの項目に[src]
と書かれたところがあるのですが、こちらをクリックすると実際のソースコードを見ることができます。