「XCB」の版間の差分
en:XCB 15:55, 11 July 2011 から翻訳 |
m 211.35.139.233 (会話) による ID:93863646 の版を取り消し タグ: 取り消し |
||
(13人の利用者による、間の16版が非表示) | |||
1行目: | 1行目: | ||
{{Infobox_Software |
{{Infobox_Software |
||
|ロゴ=[[ファイル:Xcb logo.svg|160px|XCBロゴ]] |
|||
|名称 = XCB |
|名称 = XCB |
||
|開発元 = Jamey Sharp, Josh Triplett, Bart Massey |
|開発元 = Jamey Sharp, Josh Triplett, Bart Massey |
||
|最新版 = 1. |
|最新版 = 1.13 |
||
|最新版発表日 = {{release date and age|2018|03|05}}<ref>{{cite web |url=https://lists.freedesktop.org/archives/xcb/2018-March/011091.html |title=[Xcb][ANNOUNCE] libxcb 1.13 |date=2018-03-05 |accessdate=2018-12-23}}</ref> |
|||
|最新版発表日 = [[2010年]][[8月13日]] |
|||
|対応OS = [[POSIX]] |
|対応OS = [[POSIX]] |
||
|ライセンス = [[MIT License|MIT]] |
|ライセンス = [[MIT License|MIT]] |
||
|種別 = [[X Window System コアプロトコル|X |
|種別 = [[X Window System コアプロトコル|Xプロトコル]] 開発ライブラリ |
||
|公式サイト = |
|公式サイト = {{conditionalURL}} |
||
}} |
}} |
||
'''XCB'''('''X C Binding''')は、[[X Window System]] の[[C言語]][[バインディング (情報工学)|バインディング]]である。[[Xlib]]を置換することを目的としている。このプロジェクトは Bart Massey が[[2001年]]に開始した。 |
'''XCB'''('''X C Binding''')は、[[X Window System]] の[[C言語]][[バインディング (情報工学)|バインディング]]である。[[Xlib]]を置換することを目的としている。このプロジェクトは Bart Massey が[[2001年]]に開始した。 |
||
'''Xlib/XCB''' は Xlib と XCB の |
'''Xlib/XCB''' は Xlib と XCB の[[アプリケーションバイナリインタフェース]]互換性を提供することで、段階的な移植経路を提供するものである。Xlib/XCB は Xlib のプロトコル層を使うが、Xlib トランスポート層は XCB で置換しており、XCB を直接使うために XCB コネクションにアクセスできるようになっている。 |
||
== XCB の目的 == |
== XCB の目的 == |
||
18行目: | 19行目: | ||
* ライブラリサイズを小さくし、単純化する。 |
* ライブラリサイズを小さくし、単純化する。 |
||
* [[X Window System コアプロトコル|X |
* [[X Window System コアプロトコル|Xプロトコル]]に直接アクセスする。 |
||
後者の目的には、[[C言語]]インタフェースを非同期にするという意味も含まれ、[[マルチスレッド]]化しやすくし、([[Extensible Markup Language|XML]]プロトコル記述によ |
後者の目的には、[[C言語]]インタフェースを非同期にするという意味も含まれ、[[マルチスレッド]]化しやすくし、([[Extensible Markup Language|XML]]プロトコル記述により)拡張実装を容易にする。 |
||
コアプロトコルと拡張プロトコルは[[Extensible Markup Language|XML]] (xcb-proto)で記述され、Cバインディングは[[Python]]スクリプトによって生成される(以前のバージョンでは[[XSL Transformations|XSLT]]あるいは[[ |
コアプロトコルと拡張プロトコルは[[Extensible Markup Language|XML]] (xcb-proto) で記述され、Cバインディングは[[Python]]スクリプトによって生成される(以前のバージョンでは[[XSL Transformations|XSLT]]あるいは[[m4 (プログラミング言語)|m4]]を使っていた)。第三の目的は、このプロトコル記述をプロトコルに関する文書生成に再利用したり、C言語以外のバインディングやサーバサイドのスタブ生成に活用することである。 |
||
Massey らは XCB の主要部分の[[形式的検証]]を[[Z言語]]を使って行ってきた(Xlib には誤りがあることが以前から知られていた)。 |
Massey らは XCB の主要部分の[[形式的検証]]を[[Z言語]]を使って行ってきた(Xlib にはマルチスレッドの同期処理にAPI仕様レベルで誤りがあることが以前から知られていた)。 |
||
== 例 == |
== 例 == |
||
< |
<syntaxhighlight lang="c"> |
||
/* ウィンドウ内に四角形を描画する単純な XCB アプリケーション */ |
/* ウィンドウ内に四角形を描画する単純な XCB アプリケーション */ |
||
96行目: | 97行目: | ||
return 0; |
return 0; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
XCB はこの例からも分かるとおり、[[Xlib]]にほぼ相当するものの、API の抽象化レベルは若干低い。 |
XCB はこの例からも分かるとおり、[[Xlib]]にほぼ相当するものの、API の抽象化レベルは若干低い。 |
||
103行目: | 104行目: | ||
例: |
例: |
||
< |
<syntaxhighlight lang="xml"> |
||
<xcb header="bigreq" extension-xname="BIG-REQUESTS" |
<xcb header="bigreq" extension-xname="BIG-REQUESTS" |
||
extension-name="BigRequests" extension-multiword="true" |
extension-name="BigRequests" extension-multiword="true" |
||
115行目: | 116行目: | ||
</request> |
</request> |
||
</xcb> |
</xcb> |
||
</syntaxhighlight> |
|||
</source> |
|||
== 参考文献 == |
== 参考文献 == |
||
121行目: | 122行目: | ||
*[http://www.usenix.org/events/usenix02/tech/freenix/full_papers/sharp/sharp_html/index.html XCL: An Xlib Compatibility Layer For XCB] (Jamey Sharp and Bart Massey、[[2002年]][[4月15日]]、[[USENIX]] [[2002年]]技術会議) |
*[http://www.usenix.org/events/usenix02/tech/freenix/full_papers/sharp/sharp_html/index.html XCL: An Xlib Compatibility Layer For XCB] (Jamey Sharp and Bart Massey、[[2002年]][[4月15日]]、[[USENIX]] [[2002年]]技術会議) |
||
*[http://www.usenix.org/events/usenix02/tech/freenix/full_papers/massey/massey_html/index.html X Meets Z: Verifying Correctness In The Presence Of POSIX Threads] (Bart Massey and Robert Bauer、[[2002年]][[4月15日]]、[[USENIX]] [[2002年]]技術会議) |
*[http://www.usenix.org/events/usenix02/tech/freenix/full_papers/massey/massey_html/index.html X Meets Z: Verifying Correctness In The Presence Of POSIX Threads] (Bart Massey and Robert Bauer、[[2002年]][[4月15日]]、[[USENIX]] [[2002年]]技術会議) |
||
==脚注== |
|||
{{reflist}} |
|||
== 外部リンク == |
== 外部リンク == |
||
* {{official website}} |
|||
*[http://xcb.freedesktop.org/ XCB公式サイト] ([[freedesktop.org]]) |
|||
* [http://xcb.freedesktop.org/XcbApi/ XCB API リファレンス] - [http://xcb.freedesktop.org/tutorial/ チュートリアル] |
|||
* [http://www.x.org/releases/current/doc/libxcb/tutorial/index.html libxcb チュートリアル] |
|||
⚫ | |||
* [http://xcb.freedesktop.org/Publications 論文等] |
|||
⚫ | |||
{{Freedesktop.org}} |
{{Freedesktop.org}} |
||
{{Widget toolkits}} |
|||
⚫ | |||
[[de:XCB]] |
|||
⚫ | |||
[[en:XCB]] |
|||
[[es:XCB]] |
|||
[[fr:XCB]] |
|||
[[ru:XCB]] |
|||
[[zh:XCB]] |
2023年2月17日 (金) 09:55時点における最新版
開発元 | Jamey Sharp, Josh Triplett, Bart Massey |
---|---|
最新版 |
1.13
/ 2018年3月5日[1] |
リポジトリ | |
対応OS | POSIX |
種別 | Xプロトコル 開発ライブラリ |
ライセンス | MIT |
公式サイト |
xcb |
XCB(X C Binding)は、X Window System のC言語バインディングである。Xlibを置換することを目的としている。このプロジェクトは Bart Massey が2001年に開始した。
Xlib/XCB は Xlib と XCB のアプリケーションバイナリインタフェース互換性を提供することで、段階的な移植経路を提供するものである。Xlib/XCB は Xlib のプロトコル層を使うが、Xlib トランスポート層は XCB で置換しており、XCB を直接使うために XCB コネクションにアクセスできるようになっている。
XCB の目的
[編集]XCB の主な目的は以下の2つである。
- ライブラリサイズを小さくし、単純化する。
- Xプロトコルに直接アクセスする。
後者の目的には、C言語インタフェースを非同期にするという意味も含まれ、マルチスレッド化しやすくし、(XMLプロトコル記述により)拡張実装を容易にする。
コアプロトコルと拡張プロトコルはXML (xcb-proto) で記述され、CバインディングはPythonスクリプトによって生成される(以前のバージョンではXSLTあるいはm4を使っていた)。第三の目的は、このプロトコル記述をプロトコルに関する文書生成に再利用したり、C言語以外のバインディングやサーバサイドのスタブ生成に活用することである。
Massey らは XCB の主要部分の形式的検証をZ言語を使って行ってきた(Xlib にはマルチスレッドの同期処理にAPI仕様レベルで誤りがあることが以前から知られていた)。
例
[編集] /* ウィンドウ内に四角形を描画する単純な XCB アプリケーション */
#include <xcb/xcb.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
xcb_connection_t *c;
xcb_screen_t *s;
xcb_window_t w;
xcb_gcontext_t g;
xcb_generic_event_t *e;
uint32_t mask;
uint32_t values[2];
int done = 0;
xcb_rectangle_t r = { 20, 20, 60, 60 };
/* サーバとのコネクションをオープン */
c = xcb_connect(NULL,NULL);
if (xcb_connection_has_error(c)) {
printf("Cannot open display\n");
exit(1);
}
/* 第一スクリーン取得 */
s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;
/* グラフィックスコンテキスト生成 */
g = xcb_generate_id(c);
w = s->root;
mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
values[0] = s->black_pixel;
values[1] = 0;
xcb_create_gc(c, g, w, mask, values);
/* ウィンドウ生成 */
w = xcb_generate_id(c);
mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
values[0] = s->white_pixel;
values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;
xcb_create_window(c, s->root_depth, w, s->root,
10, 10, 100, 100, 1,
XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual,
mask, values);
/* ウィンドウをマップ(表示)する */
xcb_map_window(c, w);
xcb_flush(c);
/* イベントループ */
while (!done && (e = xcb_wait_for_event(c))) {
switch (e->response_type & ~0x80) {
case XCB_EXPOSE: /* ウィンドウ描画/再描画 */
xcb_poly_fill_rectangle(c, w, g, 1, &r);
xcb_flush(c);
break;
case XCB_KEY_PRESS: /* キー押下で exit */
done = 1;
break;
}
free(e);
}
/* サーバとのコネクションをクローズ */
xcb_disconnect(c);
return 0;
}
XCB はこの例からも分かるとおり、Xlibにほぼ相当するものの、API の抽象化レベルは若干低い。
プロトコルの記述
[編集]XCB の作者はX11プロトコルを記述するプログラミング言語に中立であり、他のプログラミング言語とのバインディングを可能にする、専用のインターフェイス記述言語を XML で作った。libxcb 自身はコードジェネレーターと小さなC言語のユーティリティー関数からなる。
例:
<xcb header="bigreq" extension-xname="BIG-REQUESTS"
extension-name="BigRequests" extension-multiword="true"
major-version="0" minor-version="0">
<request name="Enable" opcode="0">
<reply>
<pad bytes="1" />
<field type="CARD32" name="maximum_request_length" />
</reply>
</request>
</xcb>
参考文献
[編集]- XCB: An X Protocol C Binding (PDF) (Bart Massey and Jamey Sharp、2001年9月19日、XFree86 2001年技術会議)
- XCL: An Xlib Compatibility Layer For XCB (Jamey Sharp and Bart Massey、2002年4月15日、USENIX 2002年技術会議)
- X Meets Z: Verifying Correctness In The Presence Of POSIX Threads (Bart Massey and Robert Bauer、2002年4月15日、USENIX 2002年技術会議)
脚注
[編集]- ^ “[Xcb][ANNOUNCE] libxcb 1.13” (2018年3月5日). 2018年12月23日閲覧。