Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

システムプログラマーのためのRust

経験豊富なCおよびC++プログラマー向けのRustチュートリアル。

目次へ移動。 コントリビューションへ移動。

このチュートリアルは、ポインターと参照がどのように機能するかをすでに理解しており、 整数幅やメモリ管理といったシステムプログラミングの概念に慣れているプログラマーを 対象としています。主にRustとC++の違いを取り上げることで、 おそらくすでに知っているであろう余分な説明をあまり挟まずに、 Rustプログラムをすばやく書けるようになることを目指しています。

願わくは、RustがC++プログラマーにとってかなり直感的な言語であるとよいと思います。 構文のほとんどはかなり似ています。(私の経験では)大きな違いは、 優れたシステムプログラミングに関する、時に曖昧な概念がコンパイラーによって 厳格に強制されることです。これは最初は腹立たしいことがあります。やりたいことが あるのに、コンパイラーがそれを許してくれない(少なくとも安全なコードでは) からです。そして時には、それらのことが実際には安全であるにもかかわらず、 それをコンパイラーに納得させられないことがあります。しかし、何が許されるかについての 良い直感はすぐに身に付くでしょう。メモリ安全性に関する自分自身の考えを コンパイラーに伝えるには、新しく、時には複雑な型注釈がいくつか必要です。 しかし、オブジェクトのライフタイムについてしっかりした考えを持ち、 ジェネリックプログラミングの経験があるなら、それらを学ぶのはそれほど 難しくないはずです。

このチュートリアルは、一連のブログ記事として始まりました。 一つには、私(@nrc)がRustを学ぶための助けとしてです(何かを学んだことを 確認するには、それを誰かに説明しようとする以上に良い方法はありません)。 もう一つには、既存のRust学習リソースに満足できなかったからです。それらは、 私がすでに知っている基礎に時間をかけすぎており、私にとってはより低レベルの 直感を使ったほうがうまく説明できる概念を、高レベルの直感で説明していました。 その後、Rustのドキュメントははるかに良くなりましたが、それでも既存の C++プログラマーはRustの自然な対象読者である一方で、特に十分に対応されている わけではないと思っています。

目次

  1. はじめに - Hello world!
  2. 制御フロー
  3. プリミティブ型と演算子
  4. 一意ポインター
  5. 借用ポインター
  6. Rcと生ポインター
  7. データ型
  8. デストラクチャリング pt 1
  9. デストラクチャリング pt 2
  10. 配列とvec
  11. グラフとアリーナ割り当て
  12. クロージャーと第一級関数

その他のリソース

  • The Rust book/guide - Rust全般を学ぶための 最良の場所であり、おそらくここに書かれている内容について別の見解を得たり、 ここで扱われていない内容を調べたりするために行くべき最良の場所です。
  • Rust APIドキュメント - Rustライブラリの 詳細なドキュメントです。
  • The Rust reference manual - 一部は少し 古くなっていますが、網羅的です。詳細を調べるのに適しています。
  • Discussフォーラム - Rustの使用や学習に関する議論や 質問のための一般的なフォーラムです。
  • StackOverflowのRust質問 - Rustに関する 多くの初心者向けおよび上級者向けの質問への回答があります。ただし注意してください。 Rustは長年にわたって大きく変化しており、一部の回答は非常に古くなっている可能性があります。
  • A Firehose of Rust - C++プログラマーに、 Rustでライフタイム、可変エイリアシング、ムーブセマンティクスがどのように機能するかを 紹介する録画された講演です。

コントリビューション

ぜひお願いします!

誤字や間違いを見つけた場合は、遠慮せずPRを送ってください!より大きな変更や、 見てみたい新しい章については、issueを 自由に作成してください。チュートリアルがそのような方法で改善できると思うなら、 既存の作業の再編成や例の拡充も歓迎します。

段落、セクション、または章をコントリビュートしたい場合は、ぜひお願いします! 扱う内容のアイデアが欲しい場合は、issueの一覧を参照してください。 特にnew materialタグが付いたものです。 何か確信が持てないことがある場合は、ここで私(@nrc)をpingするか、 irc(#rustまたは#rust-internals上のnrc)で連絡してください。

スタイル

当然ながら、想定読者はC++プログラマーです。このチュートリアルは、一般読者向けではなく、 経験豊富なC++プログラマーにとって新しいことに集中すべきです(ただし、読者が C++の最新バージョンに詳しいとは想定していません)。基礎的な内容が多すぎることは避けたいですし、 他のリソース、特にRust guide/bookとの重複が多すぎることは絶対に避けたいです。

エッジケースのユースケース(たとえば、Cargoとは異なるビルドシステムを使用する、 構文拡張を書く、不安定なAPIを使用するなど)に関する作業はもちろん歓迎します。 また、すでに高レベルで扱われているトピックについて掘り下げる作業も歓迎します。

C++コードをRustコードに変換するためのレシピ形式の例は避けたいですが、 この種の小さな例は問題ありません。

異なる形式(たとえば、質疑応答/FAQ、またはより大きな実例)の使用は歓迎します。

演習やミニプロジェクトの提案を追加する予定はありませんが、それに興味がある場合は 知らせてください。

かなり学術的なトーンを目指していますが、あまり堅苦しくはしません。すべての文章は 英語(アメリカ英語ではなくイギリス英語。ただし、アメリカ英語を含む任意の言語への ローカライズ/翻訳は大歓迎です)で書かれ、有効なGitHub markdownであるべきです。 文体、文法、句読点などに関する助言については、Oxford Style Manual またはThe Economist Style Guideを参照してください。 幅は80カラムに制限してください。私はOxford commaが好きです。

提出する作業が完璧でなければならないとは思わないでください。私は喜んで編集しますし、 将来的には他の人たちもきっとそうしてくれるでしょう。