Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rustプロダクトのキャッチアップ

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for kato manabu kato manabu
December 07, 2022
2k

 Rustプロダクトのキャッチアップ

Avatar for kato manabu

kato manabu

December 07, 2022
Tweet

Transcript

  1. どんな人間? C / C++ / アセンブラ 3 PHP / Go

    C++ / Python / Rust 8 年 2 年 2 年 今ココ
  2. 入社前のRustへの印象は? - ポストC言語として興味はあった - 長らくCに関わって、その発展形に興味があったから - Golang, Nim, vlang, Rust

    など軽く触っていた - 天才以外に使えるの? - 所有権を「完全に理解」しても、「書けるか」という不安があった 4
  3. 6

  4. 加藤の業務(例) 7 speech recognition engine End Point Proxy machine translation

    ・ ・ ・ Proxy Proxy ・エンジン提供元の会社 ・社内R&Dチーム mimiチーム
  5. 加藤の業務(例) 8 speech recognition engine End Point Proxy machine translation

    ・ ・ ・ Proxy Proxy mimiチーム エンジン提供元の会社 社内R&Dチーム
  6. ⏬ 便利な機能を全部ONにして、超重力を味わう - rust-analyzer - ないと変数の中身がわからない - cargo watch -

    コード変更と同時に check できる - ブラウザ - わからない時は検索に頼る - 気づくと数十個のタブ・・・ 13 超重力 ハイスペックPC or 取捨選択
  7. ⏬ 言語仕様をよく読まないせいで、沼る 14 - ドキュメントを流し読みしていた - 基本は C++ や Java

    ぽいし、読んでるうちにわかるはず - わからない部分を検索しよう - ?の意味がわからなかった - ?は記号なので、「rust」「?」で検索しても答えが出なかった - 言語仕様はちゃんと読もう - 特に Result, Option 周辺
  8. ⏬ 先入観で crate を使おうとして、時間をゴミにする - serde で json パースができない -

    crate は feature で指定することで機能ONするらしい - serde の feature に json って入れたら動くはず! - 失敗! - serde / serde_json は違う crate だった - ちゃんと公式ドキュメントを読もう - 公式ドキュメントを見れば、ちゃんと serde_json と書いてある 15
  9. ⏫ 光速で開発環境が整った - Cを使ってた頃 - 現場に伝わるドキュメントを探す - 更新漏れが数か所あったりなかったり - OSのバージョン、gccのバージョン、ライブラリのバージョンを調査

    - たまにライブラリのパスが特殊な位置に固定されていたりする - Rustの場合 - rustup.rs でインストール - リポジトリを git clone - cargo build - Cargo.toml がコンパイルを保証してくれる 17
  10. 何を作ったの? 21 output filter tool Text Text
 End Point Proxy

    Text Text
 Hello. hello CUIツールを 外部コマンドとして実行
  11. Tokioの履修を後回しにして、理不尽な気持ちになる - AsyncRead で read 関数を使おうとした - ドキュメントの↑を読み落としていた - スタンダードぽい名前だから

    read はあるはず・・・ - AsyncRead から AsyncReadExt に行き着く方法が他にない - 「Rust」「AsyncRead」検索しても「AsyncReadExt」出ない - read 指定すると Clippy はエラーをはくが、サジェストはしてくれない - Rust公式の次は、Tokioチュートリアルを読みましょう - (zennの日本語訳した有志に感謝) - 事実上 Ext が標準的 trait なの、なぜ・・・? 23
  12. おまじない気分だった標準的 derive、やっと視界に入る - 既存プロダクトでは、標準的 derive を意識していなかった - Clone, Copy だけ字面からわかった気でいた

    - テストで assert_eq すると、怒られる - Clippy もサジェストしてくれなかった - PartialEq を入れないと自作 struct は比較してくれない - ↓のドキュメントでそこまで察するの、無理では・・・? 24 - println! しても変数の中身を出力してくれない - Debug のつけ忘れ - あらゆるものに Debug を継承させたくなる・・・
  13. 外部コマンドの crate 探し、手間取る - 非同期の crate が見つからなかった - 標準の std::process::Command

    は「同期」処理だった - tokio::process::Command になかなか行き着かなかった - 継続的に標準入出力を操作する方法がわからなかった - サンプルはLinuxコマンドを一発実行するだけのものが多い - サンプルではなく、理解して書いた第一歩 - spawn すると child が取得できる - ChildStdin / ChildStdout は BufWritrer / BufReader に入れると管理しやすい 25
  14. 心がけたこと - パーツ交換を前提にした構成 - まれによくある「いつの間にか crate 更新止まってる」問題 - 「止まらない crate

    探し」→「更新止まってもすぐ交換できる設計」 - 密結合しないファイル構成 - 再利用しやすく、ライブラリに - (当社)構成の似たサーバを量産する需要 - 共通部分をライブラリに、無理そうでもテンプレ化しやすく 26
  15. We are hiring! • Frontend / Backend developer • Device

    Engineer • Product Manager • …and more 27 Please check the job board out!