Skip to content

コントリビューションに際して

Yuki edited this page May 1, 2021 · 2 revisions

コントリビューションを検討していただき、ありがとうございます。

この Wiki にはいくつかコントリビューションの参考になりうる情報を載せています。作業を始める前にご一読いただけますと幸いです。

まだ走りはじめのプロジェクトのため、内容は随時更新される可能性があります。最新の方針やディスカッションについては、rust-jp の Slack 上にある #learning-systems-programming-in-rust チャンネルにて行われているので、そちらをご覧ください。

このリポジトリの主眼について

  • 『Go ならわかるシステムプログラミング』の Go コードを Rust に置き換えていくプロジェクトです。
  • 置き換えていく過程で、参加者がシステムプログラミングについて学習していくことを主眼として置いています。
  • Rust と Go は、言語設計が異なる言語なので、すべてを置き換え可能ではないと思っています。「可能な限り置き換えてみる」のが、このプロジェクトの目標です。

開発について

Rust のバージョン

  • 現時点(2021/04/30)では、1.51.0 以上を想定しています。

ディレクトリ構成について

  • 章 > 節 の単位でディレクトリを切っています。
    • たとえば、3.1 節を担当する場合は、chapter3/3_1 というディレクトリ構造になります。
  • 節のディレクトリの配下に main.rs というファイルを置いて、そこをエントリポイントとしてください。
  • 節の実装時には Cargo.toml[[bin]] の設定をするのをお忘れなく。ここに設定しておくと、cargo run -p [chapter_name] --bin [bin_name] として実行できるようになります。

外部クレートについて

  • Go は標準ライブラリが厚く、Rust は標準ライブラリが薄い(たとえば Rust の場合は正規表現ですら外部クレートを使用することになります)といった事情があります。
  • std 配下に Go 側と同等の関数やモジュールが用意されている場合は、そちらをまずは利用してください。
  • ない場合は、外部クレートは積極的に利用してよいものとします。ただしもちろん、フルスクラッチできる規模であればしていただいても構いません。
  • 外部クレートを使用する際には「デファクトっぽいもの」を選ぶようにしましょう。
    • 「デファクトっぽいもの」の定義は曖昧ですが、awesome-rust に載っていたり、crates.io でのダウンロード数が1万をこえていたりする、など比較的多くの人が利用していそうなものであればよいです。

CI

  • 現状は CI で rustfmt のチェックと build & test を実行しています。
  • rustfmt の適用はよろしくお願いします。

レビューについて

レビュー

  • 参加者の方はどなたでもレビューコメントを残していただいて結構です。
  • 最終的な承認は @yuk1ty が行います。

オープン期間

  • Slack での提案により、このリポジトリには参加者が他の参加者のプルリクエストのディスカッションに参加したり、レビューしたりしながら学習できるように、「オープン期間」というものを設けています。
  • オープン期間とは、送られたプルリクエストをすぐにはマージせず、2〜7日程度オープンにしておく期間のことを指します。
  • 他の作業に依存してしまう or ボトルネックとなってしまうプルリクエストの場合はその限りではなく、すぐにマージすることがあります。