Rust の魅力に感じた点
最近は [Rust](https://www.rust-lang.org/) と呼ばれるプログラミング言語を趣味として触っています。[SWC](https://swc.rs/) や [Rome](https://rome.tools/) のように Rust で作成されたフロントエンドツールが増えていることから興味を持ったのですが、実際に触ってみて Rust が高い人気を誇る理由がよく分かるようになりました。 この記事では私が Rust を触ってみて魅力に感じた点を列挙していきます。
最近は Rust と呼ばれるプログラミング言語を趣味として触っています。SWC や Rome のように Rust で作成されたフロントエンドツールが増えていることから興味を持ったのですが、実際に触ってみて Rust が高い人気を誇る理由がよく分かるようになりました。
この記事では私が Rust を触ってみて魅力に感じた点を列挙します。
強い型推論
Rust の型推論は強力です。例えば、次のように Vec
型を宣言したタイミングでは Vec<{unknown}>
という型に推論されます。この時点ではベクターにどのような型が入るか未確定だからです。
fn main() {
let mut vec = Vec::new();
}
続いて vec.push(1)
でベクターに要素を追加されたとき i32
型が入るベクターであることが判明するのでさかのぼって Vec<i32>
型と推論されます。
関数型言語の機能
Rust「手続き型」「オブジェクト指向型」「関数型」などさまざまなパラダイムを言語思想に取り入れていますが、とりわけ Haskel や scala などの関数型言語の影響を強く受けております。
例えば、値はデフォルトではイミュータブルであることが良い例です。Rust では値をミュータブルにする際には mut
キーワードを付与する必要があります。
fn main () {
let vec = Vec::new();
vec.push(1);
^^^^^^^^^^^ cannot borrow as mutable
}
fn main () {
let mut vec = Vec::new();
vec.push(1);
}
Option
型や Result
型、パターンマッチングも Rust の重要な要素の 1 つです。Option
は欠如しているかもしれない値を示します。
fn div(dividend: i32, divisor: i32) -> Option<i32> {
if divisor == 0 {
None
} else {
Some(dividend / divisor)
}
}
fn try_division(dividend: i32, divisor: i32) {
match div(dividend, divisor) {
None => println!("{} / {} failed!", dividend, divisor),
Some(quotient) => {
println!("{} / {} = {}", dividend, divisor, quotient)
},
}
}
Result
型はエラーになる可能性がある表す値です。TypeScript でパターンマッチングを用いてエラーハンドリングを実施しようとするとどうしても言語仕様として try/catch
が入ってしまう危険性があったのですが、言語仕様として使えるのは嬉しいですね。
エラーメッセージがわかりやすい
Rust のエラーメッセージはかなりわかりやすく設計されています。 Rust のコードを書いてる際に詰まったらとりあえずビルドしてみて、コンパイルエラーを発生させてみるのも良いでしょう。
例えば、mut
キーワードを付与し忘れてイミュータブルなコードを書いてしまった場合には以下のようなメッセージが表示されます。
error[E0596]: cannot borrow `vec` as mutable, as it is not declared as mutable
--> src/main.rs:3:5
|
2 | let vec = Vec::new();
| --- help: consider changing this to be mutable: `mut vec`
3 | vec.push(1);
| ^^^^^^^^^^^ cannot borrow as mutable
For more information about this error, try `rustc --explain E0596`.
error: could not compile `hello1` due to previous error
cannot borrow
vec as mutable, as it is not declared as mutable
というなぜエラーが発生したかを示すメッセージが表示されるだけでなく、help: consider changing this to be mutable: mut vec
のように行番号とともにコードの変更を提案してくれます。これのおかげでエディタの quick fix 機能を使用すれば大体のエラーは解決してくれます。
さらに、rustc --explain [エラー番号]
コマンドによりエラーの詳細情報を取得することも可能です。
終わりに
簡単にですが、Rust を触ってみて魅力に感じた点をあげてみました。Rust は幅広い分野で活躍しているプログラミング言語であり、今後も活躍の幅が広がることが予想されるので、ぜひ一度触ってみてはいかがでしょうか?