わたしとRustの一年半

気がついたら Rust を触り始めてから 1年以上経っていたので,中途半端なタイミングだが思い出話を書き記しておきたいと思う.

注意:駄文です

きっかけ

最初に触り始めたのは確か一昨年 (2016年)の7月ごろだったと記憶している.もともと C++ を書いていたが疲れてしまい別の言語を触りたいという(大分アバウトな)理由で色々物色していたのがきっかけだったと思う.とはいってもそこまでたくさん触ったわけではなく,D言語やらGoやらも触りつつ気がついたら Rust 一本になっていたという感じ.

最初に作ったのが Gurobi という混合整数計画ソルバの Rust バインディング用のライブラリで,今から思えばよくもまあそんな無謀なことを最初にやろうと思ったよと思ってしまう.未定義動作周りを正しく理解できていない時期に書いたものなのでそのうち見直さないといけない気がする…

前半 (2016/11 ~ 2017/01)

Rust を書き続けていこうと決意した後,初期に作ったものはほとんどは(Gurobi のバインディングを除き)CLI ツールばかりだった.これは,自分が使うものであれば飽きずに続けられるとだろいう期待もあったが,どちらかと言えば「他にやることが思いつかなかった」というのが大きな要因だった気がする.Rust を始める人の多くは「まず The Rust Programming Language を読んで所有権の考えを理解してうんぬん」みたいな学習ルートを取ることが多いと思われるが,自分の場合はとにかく「書いて馴染む」ことを優先し,雰囲気を掴みつつまずは何かを作っていくことを優先した(単に読むのが面倒だったのもあるが).そのせいか今でも初歩的な知識がざっくり抜け落ちていたりするのであまり良くないんですが…

この時期に作ったものを挙げるとざっくり次の3つになる(他にも試作したまま放置しているものが結構あるが).

  • rhq - ローカルリポジトリ管理ツール
  • dot - dotfiles 管理ツール
  • wan - Wandbox クライアント

中期 (2017/01 ~ 2017/05)

さすがに CLI ばかりだと飽きてくるので他のものを色々試してみる.すでに記憶が曖昧だが思い出したものを挙げると

辺りで,迷走しながら何を作ろうか模索している時期だったと思われる.相変わらず「手を止めないように」意識した結果ではあるが,流石にもう少し対象範囲を絞ったほうが良かった気がする…

後半 (2017/06 ~ 2017/12)

この辺りから Web プログラミングに焦点が当たってくる. 最初は某トドンの影響で, Iron を使って簡単なマイクロブログを作ってやろうなどと考えていたが中途半端なところで挫折する. その後 Git サーバを作り始める.とはいっても大したものではなく git-http-backend 相当の HTTP で Git ホスティングが出来る Web サーバと簡単な API を持つものを目指していた(これも途中で頓挫したが).

Iron に飽きてきたのと,どうせなら新しいことをしたいと非同期 IO に対応した Web プログラミング周りに手を出し始める. これが大体 5 月くらいのことで,当時はまだ hyper 0.11 に対応したフレームワークが(少なくとも広く名前の知られたものは)存在しない状態だった.なので最初は生の hyper 向けの簡単なルーティング用のライブラリでも作ってみるか―と思って試作してみたのだが,「これもう少し手をかければフレームワークな乗れるのでは」と思い至ってしまいそのまま WAF 自作という泥沼にのめり込んでしまう.

まず最初に作り始めたのが Susanoo で,これは大雑把に Iron の非同期対応版を想定している.他フレームワークの設計を真似つつとにかく一通り使えるようにと色々手を加えていくうちに,気がつくと無意味に膨れ上がった構想が収集できない状態になってしまった.そうこうしているうちに Gotham や Shio といった非同期版のフレームワークが台頭してきてしまい,一気に開発意欲がなくなってしまう.また,Susanoo のルーティングの方式が正規表現ベースでパットしなかったため,他に面白い案はないかと他言語のフレームワークを物色し始める.その結果 Finchers の構想に至る…

その後は WAF に手を掛けつつ rustc 本体の実装に目を通すのを始めたり色々やっている(雑).

これから

正直何も考えていないが,当面は 2 つの WAF といくつかの CLI ツール(rhq など)をメンテしつつ,地道に学んでいければ良いかなぁと思っている.フレームワーク作るの割と楽しいので,出来れば Susanoo, Finchers 共に実用できるレベルまでは充実させたいなぁ(ドキュメントとか)と思っているが体力次第といったところである. また,中途半端に経験値が付いたせいか若干天狗になってしまっている節があるので,今後はもう少し地に足付いた言動を心がけたい所存である.

あと Rust を書く仕事につきたいが,こればかりは他力本願というわけにも行かないので早急に動き出さないといけない(と思ってはいるのだが,怠惰な性格なので特に進展のないまま放置してしまっているので良くない).実生活周りの諸々の問題も解決しないといけないが…

飽きたのでここまで