プログラミング

GLib Ref. translation progress (TAKE 10).

第五章 「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

See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Data Types: オリジナルのドキュメント (第五章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
ということで、引き続き 第五章の翻訳を行う予定。

GLib Ref. translation progress (TAKE 9).

前回から残りのセクションを翻訳し、これで第四章 「GLib のユーティリティ」は完了。
今回の4つのセクションのうちテストはバージョン 2.16 で追加された新しい API:

  • キーと値のペアからなるファイルのパーサ
  • ブックマーク・ファイルのパーサ
  • テスト
  • Windows 互換の関数

翻訳の ChangeLog は次のとおり:
キーと値のペアからなるファイルのパーサ

  • Windowsの場合のキー・ファイルの違いが追記された
  • 関数が追加された:
    1. g_key_file_load_from_dirs()
    2. g_key_file_get_double()

      “If @group_name is %NULL, the start_group is used.” とあるが実装はそうなっていないようなので注意が必要。バグ登録する予定。

  • g_key_file_get_boolean() のエラーの対処が変わった
  • g_key_file_get_integer () で @group_name = %NULL の処理がなくなった (一番先頭のグループとみなす) し、エラーの対処も変わった
  • g_key_file_set_comment() が返り値を持つようになった
  • g_key_file_remove_*() が返り値を持つようになった
  • G_KEY_FILE_DESKTOP_* の定義が追加された

ブックマーク・ファイルのパーサ

  • GLib 2.12 から追加されたデスクトップのブックマークを扱う API
  • g_bookmark_file_add_application() に誤植があったので #568294 で報告

テスト

  • 新規の翻訳
  • 一部前のバージョンの”メッセージ出力とデバッグ関数”の API を含んでいる
    1. g_assert()
    2. g_assert_not_reached()
  • g_assert_cmpflott() って誤植なんだけど…:X

Windows 互換の関数

  • pipe() マクロがなくなった
  • g_win32_get_package_installation_directory() 関数が廃止になった
  • g_win32_get_package_installation_directory_of_module() 関数が追加された

See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Utilities: オリジナルのドキュメント (第四章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
新しく追加されたテストの API は簡単な Unit Testing (アプリの単体テスト) を行う際に役に立つフレームワークを提供してくれる。テスト・ケースを生成し、テストを行うための条件やテスト自体の初期値などを持つ付帯情報、そしていくつかのテストケースをまとめて行うことができるテスト・パッケージといったインスタンスを用いて、テスト・アプリの起動から終了まで、そしてテスト中はレベルに応じたログの記録、タイマーを用いた時間計測、テスト中に文字列や整数、実数を比較してアサーションを出す機能、テストを行う関数を動的に追加したり削除したりといったあまり複雑ではないテストをサポートしてくれる。実際に GLib パッケージの test はこのフレームワークを用いるように書き直された。ちなみにテスト・プログラムを起動するための専用のコマンドライン (gtestergtester-report) も提供されている。
ということで、次は第五章 「GLib のデータ型」の翻訳に進む予定。

GLib Ref. translation progress (TAKE 8).

前回に引き続き、第四章の途中まで翻訳が完了した。
ソースコードの同期はバージョン 2.18.4 にアップデートしておいた。
このうち Perl 互換の正規表現はバージョン 2.14 で追加された新しい API:

  • Shell 関連のユーティリティ
  • コマンドライン・オプションのパーサ
  • Glob スタイルのパターン・マッチング
  • Perl 互換の正規表現
  • シンプルな XML サブセットのパーサ

翻訳の ChangeLog は次のとおり:
Shell 関連のユーティリティ

  • 日本語訳の修正

コマンドライン・オプションのパーサ

  • 日本語訳の修正
  • g_option_context_new() の説明が増えた
  • 新規に追加された関数:
    • g_option_context_set_summary()
    • g_option_context_get_summary()
    • g_option_context_set_description()
    • g_option_context_set_translate_func()
    • g_option_context_set_translation_domain()
    • g_option_context_get_help()
  • 新規に追加された型など:
    • GTranslateFunc
    • GOptionArg (一部の列挙子)
  • 引用している関数名が間違っているようなので BUG#565905 に登録した

Glob スタイルのパターン・マッチング

  • 日本語訳の見直し
  • g_pattern_match() の説明が修正されている

Perl 互換の正規表現

  • 新規の翻訳
  • 正規表現の場合、ahead というと対象とする文字列の左側、behindというと対象とする文字列の右側を指す。検索とは意味が逆になる。混乱するなぁ。
  • 全体的にしっくり行かない訳になってしまった
    • 原文もまともな英語ではないのだけれど (日本語のように省略されているので推測が難しい)
    • 原文は全体的に(英語ではなく)英文になっていないので翻訳するのに苦労した (ということで誤訳があるかもしれない)

シンプルな XML サブセットのパーサ

  • GMarkupError 型に列挙子が追加された
    • G_MARKUP_ERROR_MISSING_ATTRIBUTE
  • GMarkupParseFlags 型の列挙子が定義された
    • 今までも存在していたが空だった
  • g_markup_escape_text() 関数に説明が追加された
  • g_markup_parse_context_get_element() 関数に説明が追加された
  • 新規に追加された関数:
    • g_markup_parse_context_get_element_stack()
    • g_markup_parse_context_get_user_data()
    • g_markup_parse_context_push()
    • g_markup_parse_context_pop()
    • g_markup_collect_attributes()
  • 新規に追加された型など
    • GMarkupCollectType

See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Utilities: オリジナルのドキュメント (第四章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
残りは4つ。ということで、引き続き第四章の翻訳を進めていく予定。

GLib Ref. translation progress (TAKE 7).

前回に引き続き、第四章の途中まで翻訳が完了した。
このうち最後のセクションはバージョン 2.16 で追加された新しい API:

  • 文字列の自動補完
  • タイマー
  • プロセスの生成
  • ファイル・ユーティリティ
  • URI関数

翻訳の ChangeLog は次のとおり:
文字列の自動補完

  • 日本語訳の見直し

タイマー

  • スレッドと併用する際の注意書きが追加された
  • g_timer_start() の訳を見直した (g_timer_elapsed() が自動的に呼び出されるような誤解を生みそうな訳だったので)
  • g_timer_stop() の訳を見直した (g_timer_elapsed() が自動的に呼び出されるような誤解を生みそうな訳だったので)

プロセスの生成

  • 日本語訳の見直し
  • タイトルの説明からfork()がなくなった
  • GSpawnChildSetupFunc に補足説明が追加された
  • g_spawn_async() の説明が増えた
  • GChildWatch ソースを GChildWatchSource に修正した

ファイル・ユーティリティ

  • g_mkstemp() に説明が補足された
  • g_open() でWindows系プラットフォームの説明が補足されている
  • g_stat() にWindows系プラットフォームの説明が追加された
  • g_remove() にWindows系プラットフォームの説明が追加された
  • g_access() もWindows系プラットフォームでは全く役に立たない
  • g_utime() 関数が追加された

URI関数

  • 新規の翻訳
  • GTK-Doc の新しい書式(?)を発見した (もしかしたらテンプレートがなくなるかも)
    /**
    * SECTION:セクションの識別子
    * @short_description: このセクションの短い説明
    *
    * このセクションの長い説明
    **/

他のセクション同様に Windows 系プラットフォームに対する説明が随所に補足されている。ファイル・ユーティリティは特に注意書きが多く、Windows のCランタイムは UNIX 系のシステムコールとは異なった動きをしたり、いい加減な実装が多いそうだ。特に開発時のバージョンと実行時のバージョンが異なるとファイル・ディスクリプタさえも同じ値が返されないそうだ :$。そのような場合は、GLib on Windows は使わずに Win32 API を使えと。
See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Utilities: オリジナルのドキュメント (第四章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
現時点で第四章は60%ちょっとだから間違いなく年を越すな。ということで、引き続き第四章の翻訳を進めていく予定。

GLib Ref. translation progress (TAKE 6).

前回に引き続き、第四章の途中まで翻訳が完了した:

  • 国際化
  • 日付と時刻の関数
  • 乱数
  • フック関数
  • その他のユーティリティ関数
  • レキシカル・スキャナ

翻訳の ChangeLog は次のとおり:
国際化

  • 前のバージョンではプログラミングしやすいようにマクロだけの提供だったが、gettextで複数形をサポートするなど踏み込んだAPIを提供してきたため、それに随時対応したラッパー関数を用意している
  • gettext >= 0.15 でサポートされた新しいインタフェースに対応している (実質的にこれ以下のgettextでは動作しない)
  • g_dgettext() の恩恵を受ける際はそれぞれ関連する関数を呼び出す順番に注意すること

日付と時刻の関数

  • 新しく追加されたAPI:
    • g_time_val_from_iso8601()
    • g_time_val_to_iso8601()
  • GLib のバージョン 2.10 から GTime 型の構造体が廃止になったため g_date_set_time() 関数も廃止になった

乱数
フック関数

  • 日本語訳の見直し

その他のユーティリティ関数

  • GUserDirectory という列挙型が追加された
  • 新しく追加されたAPI:
    • g_format_size_for_display()

レキシカル・スキャナ

  • 関数の並びが変わっている
  • GScannerConfigに補足説明が追加された
  • g_scanner_peek_next_token() に補足説明が追加された

See Also GLib リファレンスマニュアル: v2.18.1 版の API リファレンス (翻訳中)
See Also SVN リポジトリ: 翻訳作業の SVN リポジトリ
See Also GLib Utilities: オリジナルのドキュメント (第四章)
See Also バグ報告と追跡: 翻訳バグなどの報告はこちらへどうぞ
引き続き第四章の翻訳を進めていく予定。