Shiki’s Weblog

ESウェブ ブラウザ

2011/07/02 #ESウェブブラウザ通信

ご無沙汰しています。おかげ様で今日でエスリル株式会社も1周年を迎えることができました。1周年の記念も兼ねて、ESオペレーティングシステムのレポジトリにエスリルで開発中のウェブ ブラウザのソースコードをコミットしたので、そのお話を。

コミットしたのは開発中のもので、英語のアナウンスにも書きましたが、まだコンセプトデモ版という位置づけです。ビルドをはじめると13〜14万行ほどのC++(0x)のソースコードをコンパイルし始めますが、その内9〜10万行くらいは、Web IDLの定義ファイルからWeb IDLコンパイラesidlが自動で生成したものです。
現状は、esidlが生成したスタブコード中に // TODO: implement me! というコメントが2,500箇所以上残っています。完成までにはこれらもひとつずつ実装していくことになります。またまだ取り込んでいないW3Cの重要な仕様書もいくつか残っています。
ビルド方法などは英語の公式ページに記載してありますが、このブログでも日本語で実際にビルドしてみたり、コードを触ってみようという方のために付加的な情報を載せておきます。
現在のソースツリー構造は以下の用になっています。
www -DOM Core,DOM events,SpiderMonkey用のJSAPIブリッジの実装

httpとurlはそれぞれ独立したライブラリとしてまとめられるように作っていっています。httpの方はGETメソッドの通常のパス以外のエラー処理やタイマー等の実装がまだこれからです。それでもBoost Asioを使っているので作業的にはかなり簡単になっていると思います。
DOM(およびHTMLエレメント)とCSSは、それぞれMVCモデルのModelとViewという関係で実装しています。なのでDOMのドキュメント ツリーはCSSの矩形ボックスのツリーに関する情報はもっていなくて、CSSViewがDOMのMutationイベントを聞いていて、イベントを受信すると矩形ボックスのツリーを構築し直して再描画するような作りにしています。ただ現在策定されているMutationイベントの仕様自体にもいろいろ問題があって deprecated になりつつあるので、さらに作り込んでいくときには新しい提案の方も見ながら実装を進めていかないといけなさそうです。
cssは現状先日勧告されたばかりのCSS 2.1ベースで、テーブルやフォームなど未実装の部分がかなりあります。HTMLInputElemetも今回はデモ用にいきなりテキストボックスで描画してしまうとか、まだそういうところです。ですので、矩形ボックスのツリーを再構築するときに必要最小限の部分だけ再構築するような最適化は、レンダラーの実装がもう少し落ち着いてから進める予定です。ただ角丸とかみんな大好きな(?)CSS 3の機能とかは先に入れたかったりもしますが。
htmlも必要最小限の部分しか実装していないので、HTML5的なキャンバスとかおもしろい要素はesidlが生成したスタブがあるだけで未実装です。
ひと言でまとめると、まだまだTODOだらけ。ただESオペレーティング システムで5年以上開発を続けているIDLコンパイラesidlにしても、Web IDLの仕様はようやく今月Last Callという段階だったりもするので、とにかく止まらずに進めていくのが大切かなと思います。
それから、さっそくUbuntuでビルドできない、という報告をいただいています。公式ページにも記載している通り現状Fedora 15をお勧めしています。実際には、gcc 4.5(できれば4.6), SpiderMonkey 1.8.5が利用できるようなシステムであれば問題ないと思いますが、情報が集まりましたらまたお知らせします。

またオープンソース プロジェクトですので、一緒にコードを作成してくださる方も募集しています。ラップトップと一緒にエスリル カフェまで遊びに来てくださるのも大歓迎です。