Xlib か、 XCB か

あまり長い記事ではないが、ネット上にあまりにも日本語記事が少ないので少しでも他の人の助けになればと思って。


記事の内容としてはXlibとXCBのどちらを選択するか、という話。

GTK使えば? とか、Qt使えば? みたいな野暮なことは聞かないし聞いてはいけない。
今日日ツールキットを使わずにウィンドウマネージャを実装しようという奇特なあなたはそんなことを聞かれても「うんまあそうだよね。俺もそう思っては居るよ」としか言えないだろう。
しかしあらゆる障害を廃し、鋼の意志でコーディングに入ったあなたはこうして最初の疑問を解消すべく、検索をかけ、ここにたどり着いたわけだ。
徹底的な速度の追求か、ツールキットでは不可能な低レベルな操作を求めたのか、単なる好奇心か。

俺は全部。
では話に入ろう。

Xプロトコルを直接触るのでも無い限り、現実的なXクライアントライブラリの選択肢はXlibとXCBの二択だと思う。
というかこいつら以外を聞いたことがない。

適当にネットを浚ってみたところ、性能という点では完全にXCBに軍配が挙がるようである。
比較という点ではhttps://www.x.org/wiki/guide/xlib-and-xcb/が分かりやすいと思う(少なくともXlibの方を幾らか勉強した後では分かりやすかった)。
日本語での比較としてはhttps://wiki.mma.club.uec.ac.jp/clear/wm_devel/libraryがあった(この団体楽しそうだな……)。

ちなみに上の電通大のものが唯一まともな日本語での検索結果である。
おそらく俺よりはるかに知識がある人物が書いたのであろうが、完全に分かっていない人にとっては参考にはなっても取っ掛かりにはなりにくい印象である。

さて、まあ性能に関してはXlibをディスり(曰く、古い・悪いなど)、XCBはある一点を除いて褒めるような記述ばかりである。
Xlibにはマルチスレッド処理に問題を抱えているようであるし、とりあえずはXCBでいいか、と。

そこでXCBのドキュメントを探すわけだが、まあ見つからない。
いや、勿論公式のリファレンスは存在しているが、公式からしてTODOだらけの整備途中なのだ。結局さわりしか分からない。
一番まともなものはhttp://www.x.org/releases/current/doc/libxcb/tutorial/index.htmlくらいなものだろうか。

他にはメーリングリストなんかがヒットするが、知りたいのは使い方ではなく、APIリファレンスなのだ。

これが唯一XCBについての良くない点である。
とにかく完全なリファレンスが存在しないのだ。

対してXlibに関しては、書籍からネットまで、非常に豊富なドキュメントがある。
今知っている中では、http://xjman.dsl.gr.jp/X11R6/X11/が最強の日本語ドキュメントで、おそらくこれより分かりやすい説明は他に見つかるまい。
チュートリアルではなくリファレンスであるため、初めはなかなか知りたい情報に辿りつけない印象を抱くだろうが、めげずに読み続け、処理の概念を掴んだ後は知りたかった情報が、読み流したところにもう言い換えようがないくらいにはっきり書いてあったことに気づけるはずだ。

この記事にたどり着いたあなたに言い残すべきことはひとつである。
将来的にXCBに移るにせよ、まずはXlibを先にやれ。

今現在Xlibで実装したものをXCBに書き換える作業を行っているが、ドキュメントの少なさが苦痛ではあれ、Xlibと対比しながら、まあなんとかならないではない、という感じである。
Xlibを一通り扱えるようになっているのなら、Xlibに便利なユーティリティ関数は多かれど、本質的に仕事をしている構造体や関数の数はごく限られていることに気づいているはずである。
少なくとも、APIに関しては、XCBはXlibよりもよりプリミティブでXプロトコルに近い少数の関数のみが用意されているものと思って概ね間違いはなかろう。

勉強が終わり次第、気が向けば備忘録を兼ねて日本語ドキュメント的なものを書くかもしれない。

コメントを残す