kdnakt blog

hello there.

Rust dojo第90回を開催した(最終回)

第90回(最終回)です。前回はこちら。

kdnakt.hatenablog.com

[第90回の様子]

2023/08/30に第90回を開催した。唐突だけどRust By Example日本語版を完走したので、これでRust dojoはおしまい!

内容としてはRust By Example 日本語版23. 互換性と24. 周辺情報に取り組んだ。
参加者は自分を入れて6人。最初は10人ちょっといたメンバーが入れ替わり立ち替わりしてなんとかここまでやってこれた。1回でも参加してくれた同僚の皆様に感謝。

[学んだこと]

  • 23. 互換性
  • 可能な限り前方互換性を保っているが例外もある
  • 23.1. 生識別子
  • 新しいキーワードが導入された場合に、古いエディションのRustを利用したライブラリで、新しいキーワードと同じ名前の関数が使われているとエラーになる
  • 2018年エディションではtryというキーワードが追加された
// 2015年エディションでコンパイルされたfooクレート
extern crate foo;

fn main() {
    foo::try();
}

// 2018年エディションでは以下のコンパイルエラー
error: expected identifier, found keyword `try`
 --> src/main.rs:4:4
  |
4 | foo::try();
  |      ^^^ expected identifier, found keyword
  • 生識別子(r#)を利用して以下のように回避できる
extern crate foo;

fn main() {
    foo::r#try();
}
#![crate_name = "doc"]
// これは通常のコメント

/// これはドキュメンテーションコメント
pub struct Person {
    /// ジュリエットがどんなに名前というものを嫌っていようと、
    /// 人物には名前が必要です。
    name: String,
}

impl Person {
    /// 与えられた名前を持つpersonを返します。
    ///
    /// # Arguments
    ///
    /// * `name` - `person`の名前を表す文字列のスライス
    ///
    /// # Examples
    ///
    /// ```
    /// // バッククォートによってRustのコードをコメント中に挟むこと
    /// // もできます。`rustdoc`に--testを渡せば、テストも行えます!
    /// use doc::Person;
    /// let person = Person::new("name");
    /// ```
    pub fn new(name: &str) -> Person {
        Person {
            name: name.to_string(),
        }
    }
}
  • cargoを使わずrustc、rustdocコマンドをそれぞれ実行する場合は以下のようになる
# コードをライブラリとしてビルド
$ rustc doc.rs --crate-type lib

# rustdocでライブラリを指定してテスト
$ rustdoc --test --extern doc="libdoc.rlib" doc.rs
// futures-rsライブラリでの利用例
#[doc(hidden)]
pub use self::async_await::*;

[まとめ]

モブプログラミングスタイルでRust dojoを開催した。

来週からはHaskell dojoが始まるんじゃよ。