Slide 1

Slide 1 text

RustでPagerを作ってみた RustのLT会! Rust入門者の集い #6 2018.11.26 @ryochack

Slide 2

Slide 2 text

About Me @ryochack 組み込みソフトウェア開発が仕事 システムプログラミング目当てでRust触り始めた 昨年、組み込みRustの同人誌書きました 2

Slide 3

Slide 3 text

RustでPager作ってみたという話 3

Slide 4

Slide 4 text

対象とする人 Rustが好きだ CUIが好きだ ケチ 節約が好きだ 記憶力が貧弱だ それ、tmuxやscreenでいいじゃん、って言わない人 4

Slide 5

Slide 5 text

Pager、使ってますよね less / more 呼吸をするように使うもの 5

Slide 6

Slide 6 text

でも、こんなことありませんか? 6

Slide 7

Slide 7 text

1. lessを起動する 2. lessでファイルを閲覧する 3. lessを終了する 4. lessで何を見ていたか忘れる 5. ※1に戻る 7

Slide 8

Slide 8 text

つらい 8

Slide 9

Slide 9 text

他のツールは… cat / less +X : ターミナルのバッファが必要以上に汚れる head / tail : 見たい行がどこかわかってないといけない grep : マッチするものが多いとノイズが増える 9

Slide 10

Slide 10 text

要求 最後に見ていたものがそのままターミナルに残る ターミナルバッファを必要以上に汚さない lessのようなインタラクティブな閲覧ができる 10

Slide 11

Slide 11 text

peep https://github.com/ryochack/peep $ cargo install peep 11

Slide 12

Slide 12 text

peepの機能 指定行数内でのテキストファイル閲覧操作 Viライクなキーバンド tail -f / less +F モード 正規表現でのキーワード検索 Linux / MacOSサポート (Windowsでは動作しません) 12

Slide 13

Slide 13 text

Demo 13

Slide 14

Slide 14 text

peepの構成 14

Slide 15

Slide 15 text

知見(と苦しみ) 複数モジュールから参照するバッファ/Traitのハンドリング Borrow Checkerとの戦い… Rc> 便利だけど…? Unicode文字の表示幅のハンドリング Unicodeを取り扱うWGがある unicode-rs unicode-width クレート ターミナル操作のテストに失敗する cargo test はデフォルトで並列テスト cargo test -- --test-threads=1 でスレッド数を1に 固定できる Shift_JISなどのUTF-8以外のファイルを入力すると死ぬ 15

Slide 16

Slide 16 text

まとめ CプログラマにとってRustはムズカシイ コンパイラが通ったあとの安心感がある Rustを書いてからCに戻るとつらい 16

Slide 17

Slide 17 text

ご清聴ありがとうございました This slide was generated by Marp 17