まえがき
先輩にオススメされて「プログラミング言語Rust: 2nd Edition」の日本語版pdfを読み始めました。
https://y-yu.github.io/trpl-2nd-pdf/book.pdf
https://qiita.com/yyu/items/18df35988f3ea3b12af0
僕はまだ6章を読んでるところなのですが、ここまで読んだだけでもわかりました。
Rustすごい。楽しい。
いやほんとコンパイラが優秀って言えばいいんですかね。
常々プログラムを組んでいて気になっていたところを言語仕様として吸収してくれていて
快適にコーディングできそうな気配がしたのでぜひぜひ布教したい。
その一環としてQiitaに初めて記事を投稿してみようと思いました。
ぶっちゃけ僕が伝えたいことは全てpdfに書かれているのでpdfを読んでほしいのですが
忙しい人やまだ興味を持っていない人は読まないと思うので
途中まで読んですごいと思ったところだけ以下に書いていきます。
ところで日本語版pdfは最後まで読んだ人の話によると
途中から日本語が怪しくなるそうで本当は原文を読んだ方がいいらしいです。
僕は日本語版pdfしか読んでいないので、本文引用は日本語版pdfから行います。
6章までなら日本語版でも読める日本語でした。
Rustすごい
理念的なところ
基本的にほぼ全ての挙動がコンパイル時に予想できるように言語仕様が決まっていて
コンパイルの時点でエラーが発生することでバグを未然に防げるような作りになっています。
不変と可変
基本的に全ての変数は不変で、可変にしたい場合は明示する仕様になっているので
「この変数は書き換えられる予定じゃなかったのに、いつの間にか書き換えられてる・・・」
みたいなことが起きにくくなっています。
不変な変数を書き換えようとすればことごとくコンパイルの時点でエラーが発生するので
「この変数は書き換えられない」と自信を持ってコーディングできます。
所有権
所有権という概念がイケてます。
全てのプログラムは、実行中にコンピュータのメモリの使用方法を管理する必要があります。プログラムが動作するにつれて、定期的に使用されていないメモリを検索するガベージコレクションを持つ言語もありますが、他の言語では、プログラマが明示的にメモリを確保したり、解放したりしなければなりません。Rust では第 3 の選択肢を取っています: メモリは、コンパイラがコンパイル時にチェックする一定の規則とともに所有権システムを通じて管理されています。どの所有権機能も、実行中にプログラムの動作を遅くすることはありません。
(pdfより一部引用)
具体的なことはpdfに書かれているのですが、要約すると
-
- 変数がスコープから外れるとその変数で確保されたメモリは解放される(これでヒープメモリの解放漏れはなくなる)
-
- 所有権という決まりがあって有効な2変数が同じアドレスを見ることはない(これでヒープメモリの二重解放がなくなる)
- ただしこれだけだと利便性が失われるので参照は可能(こちらも厳密な制約がありなんだかんだ安全)
といった感じです。すごい、要約すると全然伝わらない!
pdfには具体的なコード例も載ってるのですごく分かりやすいです。
nullがない
Rustにはnullがないです。
nullがあると「Tに値が入っていない可能性」というのが出てきて
必ずnullチェックをしなくてはいけない、みたいなことが発生します。
しかしnullが存在しないRustでは「Tに値が入っていない可能性」はありません。
Tであれば必ず値が入っていると断言できます。
ちなみにnullの代わりとなるものが Option 型の None なのですが
nullとの違いは型が必ず決まっている、というところでしょうか。
Optionであれば必ずnullチェックにあたる操作を行い、
Tであれば必ず(nullチェックを)しなくてよい、と決め打てるのはかなりのメリットです。
おわりに
全然伝わらない・・・ やはりpdfを読んでもらうしかないのでは・・・
そもそも6章までしか読んでいないのもありますし
まで書いて数ヶ月この記事の下書きは放置されていました。
多分、あまりにも伝えたいことが伝わる文章が書けなくて拗ねてたんだと思います。
実際、今読み返しても全然伝わってこないですがせっかく書いた文章なので投稿しちゃいます。
なお、当の本人はその後も6章以降読んでないしRustも全然触らなくなってしまいました・・・
といってもそれはRustに魅力がなかったからではなく、どちらかというと本人の忙しさとかの問題なので
また時間をみつけてRustを再勉強してみようと思います。
この記事で「Rust触ってみようかな」と思う人が一人でも増えると嬉しいです!
記事の始めに書いたpdfは本当にわかりやすいので、ぜひぜひ読んでみてください!
ではでは。