🖋️

Rust3000行でテキストエディタを作るチュートリアルをやった

2024/09/23に公開

想定よりだいぶ大変でした。


hecto

成果物はこれ↓

https://github.com/kawarimidoll/kilo-study

参考サイトはこれです↓

https://www.flenker.blog/hecto/

インスパイア元↓

https://rhysd.hatenablog.com/entry/2019/08/29/091753

感想

  • Rustはこのチュートリアルが初体験
    • ずっと勉強したいとは思っていたので良い機会だった
    • チュートリアルを進めていくなかで所有権とかライフタイムとかを少しずつ導入していき説明も挟んでくれるので助かった
    • しかし3000行の経験を積んだ程度ではまだまだエラーの読み解きは難しいな〜という印象
    • パターンマッチ、ResultやOptionといった概念は先にGleamをやっていたおかげで問題なく理解できた
  • 外部依存ナシのC言語版が1000行程度だったので外部ライブラリを使えるRust版は行数が少ないのかしらと思ったが結果的に3000行になった
  • C版は1週間ほどで完成したがRust版は3週間弱かかった
    • ほぼ行数に比例した期間の増加
    • 両チュートリアルをやっていた期間は筆者は無職だったのでまとまった時間をとることができた
    • 仕事の合間に進めていたらもっと完走まで時間がかかったと思われる
  • 序盤の時点でファイルを分割してくれるのでC版より見やすい気がした
    • とはいえ上掲画像の通り最終的にはソースファイルが40超になるのでなかなか迷子になる
    • ファイル分割によってuseを書く必要があるのも行数が増えている一因かも
  • チュートリアルの解説・成果物は素晴らしいのだがコードの見せ方にはちょっと疑問あり
    • 疑問というか…正直なところ怒った
    • 記事の途中で「次はこれを実装しましょう」という形で課題が出され、解答例のコミットを示す形でチュートリアルが進んでいくのだが…解答例のコミットが巨大すぎる
    • 丸ごと実装した結果を示すのではなく、もう少し段階を踏んで解説してほしかった
    • そもそもC版より合計行数が多いし、C版のチュートリアルでは184 stepsあったのがRust版では44 stepsになっているので、各コミットの変更量が大きい
    • しかも課題の機能実装だけでなく記述順序の変更や変数名の変更といったリファクタリングも同じコミットに入れられているので変更の目的を読み解きづらかった
    • 怒りのコメント
    • Rustに慣れているひとなら楽に読解できるのかな…?
  • やっぱりテストあったほうがいいね
    • チュートリアルにはテストは無かったのだがいくつかのヘルパー関数に関して自主的にテストケースを書いてみた
    • 単体テストがあれば大きい機能をまるっと実装しなくても個別に確認できるからコミットを小さくできて良い
    • https://bsky.app/profile/kawarimidoll.bsky.social/post/3l4hozhyu542m
  • C版と異なり、日本語や絵文字も表示できる
    • これはRust版の明確なメリット
    • とはいえ文字幅などはunicode関連のライブラリを使ってちゃんと計算を実装する必要はある
  • C版と同じく、普通にありそうな機能が不足しているので実用レベルとはいえない
    • コピペとかアンドゥとか複数ファイルとか
    • 余裕があれば機能追加していきたい
    • いま世に出ているエディタはこういうのを全部クリアしているのですごいなあと思いました
  • 色情報はHEX形式で指定できるようにアレンジした
    • 一つだけでも自作ポイントを入れられると楽しい
    • これを追加したのも合計行数が増えた要因
  • departure-monoは魅せfontとしては見やすいほうかも

C言語版をトライした記事はこちら。

https://zenn.dev/kawarimidoll/articles/69119b3f5e1172

Discussion