ubnt-intrepid's blog

書いてあることがブログの内容です

Susanoo の開発方針を整理

注意: 駄文です

Susanoo を作り始めてから既に一ヶ月以上経ち(いまだに完成する目処が立っていないが…)、最初の頃と比べて開発方針が変わってきた気がしてきたので忘れないうちに吐き出しておく。 別にブログとして書き出す必要はない気がするが…

基本コンセプト

最初は「Hyper0.11ベースの Futures が使える WAF」くらいの漠然としたイメージで、設計方針も既存の Iron や Nickel のものを拝借しつつそれっぽく作れば良いだろうと適当にしていた。 しかしこれだと余計な型消去が頻発してしまい、Rust(というか C++)の特長の一つである「ゼロコスト抽象化」の恩恵が受けづらくなる。 なので、フレームワークで使用されるトレイトオブジェクトを可能な限り消去する方向に切り替えることにした。 パフォーマンスを気にするのであればいつかは通らなければならない道なので、仕様が固まる前に早めに対処しておくのはまぁ悪いことではないだろうと思う。

現状 Rust 向けの WAF でこのコンセプトで作られているものが何故か少ない気がするので(単に僕自身の観測範囲が狭いだけかもしれないが)、その意味でも独自性を保つことができるのでは…と少し期待している。あくまで完成すればの話だが。

とりあえず漠然とした開発方針をまとめると以下のような感じだろうか。

  • 使い勝手の良さ(フレームワーク利用者側が記述するコード量を極力減らす)
  • 静的ディスパッチを極力避ける
  • ミドルウェアによる拡張性を担保する

現状はこれらを同時に満たすことのできる設計を実現するため、他言語の WAF をちまちま調べながら模索しているところである。 Flask っぽさを目指すと良さそうだけど

ルーティングについて

現状かなり雑な実装がそのまま残ってしまっているので、どこかしらのタイミングで真面目に実装し直すか、既存のルーティング用のライブラリ (route-recognizer など)に切り替えるかしたいと思っている。 ルータの実装を切り替えられると便利な気がするが需要はあるんだろうか?

Cookie・セッション管理について

当初はミドルウェアとして後から付け足せば十分だろうと思っていたが、それだと付け焼き刃な感じになる気がしたので真面目に取り組むことにした。

Gotham について

もたもたしている間に似たようなコンセプトで出来の良いものが公開されてしまってショックを受けているが、まぁしょうがない…