第五章 「GLib のデータ型」の途中まで翻訳した。
この目次にあるように、長らく提供していたメモリ・チャンク (Since バージョン 1.2.x) が廃止 (Deprecated) になり、代わりに メモリ・スライス (Since バージョン 2.10) が追加された。共にメモリを一括して確保し管理するためのデータ構造とアルゴリズムなのだけれど、前者にはパフォーマンス上の問題があるため、後者では Linux スラブ・アロケータのアルゴリズムを採用することで、メモリチャンクを複数のスレッドから利用した時のようなオーバーヘッドを回避することができるようになった。要するに、目次でわざわざ強調しているように「メモリチャンクは効率が悪いデータ構造なので使うな!」ということ。メモリ・スライス、メモリ・チャンク共に利用頻度の高いデータ構造の GList 型 や GSList 型、GHash 型なんかで利用されているから、このアルゴリズムの変更は GLib のバージョンを選定する上でかなり重要なポイントになるということか。
大量のデータを要素に持つリストを確保する場合や複数のスレッドからそのようなメモリにアクセスするようなケースが想定されるならば GLib バージョン 2.10 以降を選定すべきかと。むしろ GLib-2.8 を「実装がこなれているかどうか」 (実装の安定度とバグの総数に変動がない状態かどうか) の境界としていたが、GLib-2.10 を境界とした方が良さそうだ 。
次のセクションの翻訳が完了した:
- メモリ・スライス
- メモリ・チャンク
- 双方向連結リスト
- 単方向連結リスト
- 両端キュー
翻訳の ChangeLog は次のとおり:
メモリ・スライス
- 新規の翻訳
- g_slice_free_chain_with_offset () と g_slice_free_chain() は #GSList を使うことを前提にした実装なので、リストは解放せず、リストの中に格納したメモリ・ブロックを解放するという点に要注意 (リスト自身は解放しない)
メモリ・チャンク
- スレッド使用時のオーバーヘッドが大きいためメモリ・スライスを使うと言うことで廃止候補になった
- これを使ってはいけないし、実際動かない
- これを利用したコードは書き直しが必要
双方向連結リスト
- g_list_delete_link()関数の説明が補足されている
- g_list_free()関数の後始末がメモリ・チャンクではなくメモリ・スライスに変更された
- g_list_free_1()関数の別名としてg_list_free1()マクロが追加された
- 新規に追加された関数
- g_list_insert_sorted_with_data()
単方向連結リスト
- g_list_delete_link()関数の説明が補足されている
- g_list_free()関数の後始末がメモリ・チャンクではなくメモリ・スライスに変更された
- 新規に追加された関数
- g_slist_insert_sorted_with_data()
両端キュー
- g_queue_free() の説明が増えた
- 新しく追加された関数やマクロ
- G_QUEUE_INIT() マクロ
- g_queue_init() 関数
- 誤植: g_queue_link_index () の @Gqueue
GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
SVN リポジトリ: 翻訳作業の SVN リポジトリ
GLib Data Types: オリジナルのドキュメント (第五章)
バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
ということで、引き続き 第五章の翻訳を行う予定。