Book: Web Browser Engineering
Chrome の中の人が書いたブラウザの本。Python でブラウザを作っていく構成で 500 ページくらいに短く収まっている。
短いので、CSS のレイアウトという自分がブラウザのメインだと思っていたことは全然やらない。一方で CSS をパースして簡単な selector をあててフォントの色や大きさを変えたりはする。あとレンダリングだけでなくタブもスクロールバーも実装する。HTTP も requests でさっと済ましたりはせず、自分で実装している (HTTP/1.1)。JS 自体はさすがに実装しないが、Python につなぎやすい JS 処理系を持ってきてくっつける。
Python なので性能もクソもないな・・・とおもいきや、なぜかレンダリングを別スレッドに押し出てみたり、途中まで TK で進んでいたレンダリングを途中で GPU 使うぞ!とかいって SDL+Skia (python binding) に置き換えレイヤでスクロールを高速化してみたり、性能分析のために Systrace / Perfetto 互換の JSON を生成してみたり、話題の選び方が興味深い。60fps は大変だから 30fps で許して、とかいってて笑ってしまった。
世の中の人が「ブラウザ」と聞いて想像する話題ではなく、ブラウザの中の人が関心を寄せている部分に重きを置くという意図なのだろう。細部よりアーキテクチャを伝えようとしている。コードも、機能の割にはちょっとばかりオーバーエンジニアリングに感じる瞬間がある。たとえばかなり序盤から dispaly list というものを導入しており、なんて?という感じはする。後半にその伏線が回収される。
意図は伝わってきたし、この著者でないと書けない内容だろうなとも思った。面白い本です。あと細々読まなくても Python のコードをパラパラ眺めるだけでけっこう雰囲気がわかり、それもいい。Python は偉大。
実際に動くコードを書きながら章が進んでいく構成はある意味で Physically Based Rendering: From Theory to Implementation を連想される。が、出来上がるものはだいぶちがう。PBRT はわりかし完結した C++ のレンダラが完成し、実際このコードから派生したレンダラというのも世の中にはあるらしい。一方 WBE のウェブブラウザは、ここから派生したウェブブラウザ・・・ができないのは仕方ないとしても、自己完結感は薄い。Python で色々なライブラリを寄せ集めている。
まあ Chrome だと JS(V8) も HTTP(quiche) も描画(Skia) も結局自分で全部持っているので「寄せ集め」よわばりはフェアでないかもしれないけれど、ブラウザというのはなにか一つの完結したテクノロジではなくて、グラフィクスからネットワークから言語処理系からデータベースまで、色々なテクノロジをつなぎ合わせ得て coherent な何かを提供するプラットフォームなのだよね。
そんななかウェブ固有の技術というのは何だろう。というと結局 HTTP と CSS と HTML (JS を数えてもいいかもしれない?でもウェブというより言語処理系だよな) だと思うけれど、世の中 HTTP (少なくとも pre-2.0) は比較的よく理解されており、HTML は単体では何も面白くない。CSS のレンダリングモデルやレイアウトアルゴリズムの教科書があればいいのになー。標準読めという話なのかもしれない。
そういえばウェブ標準・インターネット標準という莫大な「仕様」が存在するのもレイトレーシングとは趣が違うところかもね。レイトレもシーンデータとかあるけど、そのファイルフォーマット仕様を読んでレイトレの理解が進むとは思えないからね。