Satoshi Kojima

March 25, 2021

Rustで気づいた細かすぎるメモ

* Read traitを実装している引数に、文字列を渡したい時(テスト目的など):"文字列".as_bytes()とかやる。 * Fromトレイト:エラーはないからResultでもOptionでもない。基本変換できる前提。 * FromStr:これは当然エラーはあり、from_str() -> Result。
Read more

March 21, 2021

epub-zip-rs

Rustリハビリのためにとにかく何か作る計画、展開したEPUBをzipするだけの簡単なコードを書いた。Rustで書くまでもなくshell scriptでやった方が早いような処理だ。 https://github.com/skoji/epub-zip-rs * エラー処理は毎度わからない。昔使ったfailureは今はdeprecated * ファイルを扱おうとするとPath, PathBuf, OSStr、などが入り乱れるし、どれも正しくOptionやResultで包まれているので、ちょっとしたことをやるにもたくさんコードを書かなくてはならない感じがする。これは、私がわかってないところもあるのだろう。 * zip-rsは、公式のexampleでdeprecatedなA...
Read more

March 15, 2021

Rustでつまづくところ

所有権はもちろんなのだけど、他の部分でも私は割とつまづきがちだ。 * 型強制:例えばrcの型がRc<RefCell<T>>の時、rcから直接RefCellのメソッド、例えばrc.borrow_mut()が呼べるのは、Rc<T>がDeref<T>を実装しているから。こういう型強制の仕組みがあっちこっちにあって当たり前に使われる。 * Trait:原則としてuseしないとその型が実装してるtraitが見えないので、LSPに頼ってメソッド探すと見つからないし、公式ドキュメントでもimpl Trait以下が畳まれててすぐに気づかないこともある * 関連型とジェネリクス:これはそもそも違うものなので慣れればわかっていくだろうけれど、一見似ている。 * ref, &, mutの...
Read more

March 14, 2021

ビッグO記法は

集合であるから、「ある関数がO(n)である」という慣習的な言い回しは、「ある関数がO(n)に含まれる」という意味である。
Read more