GLib 的更改

GLib 的更改 — 和先前版本的 GLib 之间不兼容的更改

从 2.0 到 2.2 的不兼容更改

  • GLib 更改了伪随机数生成器-赛特旋转 (Mersenne Twister, 就是 GRandGRandom 所使用的) 的种子算法。 这是必须的,因为一些种子可能产生很差的伪随机流。 使用新版本的 GLib g_rand*_int_range() 产生的随机整数也会有稍微好一点的公平分配。

    网页上关于赛特旋转(Mersenne Twister)伪随机数生成器的进一步信息在 http://www.math.keio.ac.jp/~matumoto/emt.html.

    2.0.x 中的旧的种子和生成算法可以通过设置环境变量 G_RANDOM_VERSION 为 '2.0',来替代新版使用。只在您有的确需要传承的 Glib-2.0 产生的数字序列时 才使用 GLib-2.0 的算法。

从 1.2 到 2.0 的不兼容更改

位于 http://developer.gnome.orgGNOME 2.0 移植指南有更多的从 1.2 到 2.0 移植的细节讨论。请阅读 GLib 一节。

  • 事件循环功能 GMain 已经广泛的修订, 以支持在分离线程的多个分离的主循环。 所有 sources (计时、空闲等函数) 都与GMainContext联系起来了。

    仍然存在兼容函数,以使多数处理主循环的程序代码能继续工作。 但是创建新的 sources 的自定义类型的代码需要修改。

    主要的修改是:

    • Sources 以 GSource * 暴露,而不是仅仅是数字 id。

    • "derivation" 结构 从GSource创建一个 sources 新类型, 所以虚函数 GSourcesource_data 参数 被替换为 GSource *.

    • Sources 刚刚创建,于是稍候被添加到了具体的 GMainContext

    • 修改了调度,以使回调和数据都可以传递给 dispatch()虚函数。

    为了顺应这一变化, GIOChannel 的 vtable 改变了,同时 add_watch() 被替换为 create_watch().

  • 更改了g_list_foreach() and g_slist_foreach() , 以使它们安全的应对移除当前条目,而不是下一条目。

    在任何情况下回调这些函数时,都不推荐变更这些链表。

  • GDate 现在用 UTF-8,而不是当前区域设置。 如果希望使用它处理当前区域的编码, 您需要首先使用g_locale_to_utf8()转换字符串的编码。

  • g_strsplit() 被更正为:

    • 包含结尾的空标记,而不是剥离它们

    • 最多分割为 max_tokens 节, 而不是 max_tokens + 1

    所有依赖于这些 bug 的代码需要更正。

  • 移除的过时函数: g_set_error_handler(), g_set_warning_handler(), g_set_message_handler(), 使用 g_log_set_handler() 来替代.