技術書を読んだので備忘録を兼ねてメモを残しておく。
書誌情報
- タイトル: バックエンドエンジニアを目指す人のための Rust
- 出版社: 翔泳社
- 著者: 安東一慈、大西諒、徳永裕介、中村謙弘、山中雄大
筆者の Rust 勉強具合
The Rust Programming Language 日本語版 (以後 Rust Book とする) は一通り読んだ。16 章の「恐るな!並行性」や、19章の「高度な機能」の理解はちょっと怪しい。20 章の「最後のプロジェクト:マルチスレッドのWebサーバを構築する」は流し読みしただけ。
Command Line Applications in Rust (CLI in Rust) は流し読みした程度、手は動かしていない。
感想
Rust Book を読んだ後、感覚を掴むためにサンプルコードを写経するような読み方をしたが、このような読み方が合っているかもしれない。 本書では trait などの取り扱いがないので、本書だけでは色々と知識が不足する印象を受けた。
Rust Book で詰まるところがなかった人であれば本書は読まなくても良い気がする。
読書メモ
1~2章
特筆すべきことはなく、サラッと読んで次へ。
3~9章
基本文法は Rust Book で読んでいたので、手を動かす練習を兼ねてサンプルコードを写経した。 rstest は初めて知ったので、ドキュメントを流し読みしてみた。
10章
バージョン指定せず最新のクレートを cargo add したら少し苦労した。 具体的には askama v0.13 からは
askama_actix のような integration crates は削除されたようなので、レンダリングは
askama
のドキュメントを読みながら適宜書き換えながら進めた。
ちょっと気になったところ
下のサンプルコードで pool.as_ref() としているのは web::Data<SqlitePool> から SqlitePool
を取り出すためだと思うのだが、 web::Data は AsRef を実装していなさそうだった[1]。 web::Data<T>
の中身は Arc<T> のようなので[2]、 Arc<T> の as_ref
実装[3]が使える、ということなのかもしれない。
use actix_web::{Responder, get, web};
use sqlx::SqlitePool;
#[get("/")]
async fn todo(pool: web::Data<SqlitePool>) -> impl Responder {
let rows = sqlx::query("SELECT task FROM tasks;")
.fetch_all(pool.as_ref())
.await
.unwrap()
// 略
}
11章
サラッと斜め読みして次へ。
12章
Rust Book 16章を読んでいないとわかりにくいのでは、と思いつつも、チャネルの使い方は Rust Book よりも具体的で分かりやすかもしれない。