2022年のいま、最も注目されているプログラミング言語のひとつにRustがあります。
Linuxカーネルでも使えるようになるらしいRustを一週間勉強してみました。
洗練された言語仕様がクールでした。
プログラミング言語Rust
プログラミング言語Rustを勉強してみました。
The Rust Programming Language 日本語版という無料で公開されている本を勉強してみました。
Rustの特徴
Rustの特徴は以下です。イト屋の感想も入っています。
- C言語、C++と同等の実行速度
- 文法はC++に似ている
- メモリ安全性
- マルチスレッド、オブジェクト指向、トレイト(テンプレート)
- ビルドシステム、単体テストフレームワークを自前で持っている
後で一個ずつ説明します。
難しいのか?お薦めできないのか?
RustのWikipediaの項にさえ「学習難易度が高い」と書いてあります。本当にそうですか?
初めてプログラミング言語に薦めるかと言われると絶対に薦めません。初めてであればPythonとかを学んで下さい。
ただ、C++よりも難しいかというとそうではありません。
メモリ安全性がありつつ、実行速度も速い。マルチスレッドやトレイト(テンプレート)もありつつ、C++に比べると言語仕様は小さくて、言語仕様が洗練されていて覚えやすいです。また、自動テスト、単体テストフレームワークを自前でもつのであれこれと付属で覚えることは少なそうです。
C++を修得するには千ページ以上の本を読まなければならないことを思い出すと、C++に比べてはるかに優しく易しいプログラミング言語といえます。
一応、C++の習得の困難さを過去に書いたので興味があればどうぞ。
>>> 【C++魔術師への道】どうやってC++を習得するか?
というか、C言語、C++で仕事したことがある人であれば、メモリ管理だけでもプログラマに対する優しさと書きやすさを実感できます。
C言語、C++を置き換えるのを目指しているようですが、Cプログラマ、C++プログラマこそが簡単に習得できる言語です。
軽量言語しかやったことない人には難しいと思います。けど、それはC++やJavaが難しいというのと同レベルかと思います。JavaやC#の人には、メモリ管理が難しいです。多分。でも、C++のメモリ管理よりはすっきりしていて易しいと思います。
要するに、初心者にはお薦めしないけど、プログラミングの経験者であれば修得は易しくお薦めです。
さて、ここからRustのいいところを詳しく解説していきます。
C言語、C++と同等の実行速度
C言語の最大の利点に実行速度があります。リアルタイム系や組み込み系では、実行速度ただ一点からC言語を採用する製品が多数あります。
C言語の直系の子孫であるC++は、実行速度はC言語と同等、一部ではC言語を上回ります。
RustはC言語、C++と性能同等であることを目指していて、いくつかのベンチマークではC言語、C++と同等だそうです。
文法はC++に似ている
プログラミング言語の文法は、強い型付けがあるのでC++、Java、C#に似ています。
私だけの感想で他の方は誰も言っていないですが、先進的な関数型言語を書いている雰囲気が漂います。言語仕様が小さいため、最小限のコードを書くように誘導されます。すっきりとした緊張感があってよい言語体系と思います。
メモリ安全性
C言語、C++で仕事がしたことがあれば、メモリリークやメモリ破壊で地獄を見たことは一度や二度ではないと思います。筆者は、何度も徹夜しました。
1時間に1回、数Kバイトずつリークして数か月~数年でシステムを食いつぶす、というような悪夢は常に付きまとうC言語です。
C++で様々な工夫を取り入れることで、だいぶよくなりました。デストラクタにメモリ解放をしこむとかスマートポインタを使いこなすとか、いろいろできますが、それこそ難易度高めです。
Javaはガベージコレクション(GC)で、メモリ安全性を確立しましたが、GCが動くときは性能劣化するという仕様はいやですね。
Rustは、所有権、借用などの概念を導入してメモリ安全性を主張します。
メモリリーク、解法漏れは言語仕様上ありえません。メモリ破壊は、コンパイラが注意してくれます。C言語、C++は実行してみないと分からなかった、いや実行しても分からなかったことがコンパイラが注意してくれます。
おそらく、所有権、借用などの概念がRustで最も難しいところですが、C、C++で普通にポインタを扱える人であれば理解は容易です。とくに、C++で参照とかムーブとか右辺とか左辺とかの概念をちゃんと理解しているような人であれば、Rustの方が易しいと思うでしょう。
マルチスレッド、オブジェクト指向、トレイト(テンプレート)
Rustは新しい言語なので、他言語ではライブラリとするしかなかったものなどを自前で持っています。
マルチスレッドプログラミングがすんなりできるし、オブジェクト指向は当たり前に、そしてトレイトという考え方でC++のテンプレートが実現されています。いわゆるジェネリックプログラミングも可能です。
言語を修得した後に、マルチスレッドのためにもう一冊の本を読む、などはなさそうです。
ビルドシステム、単体テストフレームワークを自前で持っている
C言語、C++ではビルドで何を使うか、自動テストで何を使うか、悩みどころです。
これらを言語の外部に頼ると、仕様変更、サポート終了のリスクを許容しなければなりません。筆者の見たことがある製品では、eclipseにビルドを任せていて、eclipseのバージョンアップごとに何かいじらないといけない事態になっています。
他言語であればツールだけど絶対に使うよね、というものを自前で持っていることにとても安心感があります。
Rustを勉強するために
今回筆者が勉強した本はThe Rust Programming Language 日本語版です。無料で公開されています。まずはここから始めてみてください。
紙の本はオライリーの本がお薦めのようです。
まとめ
Rustを一週間勉強して感想を書いてみました。
噂では難易度高だったんですが、言うほど難しくはありませんでした。
いろいろな意味ですばらしい言語だと思います。
コメント