今年九月,GLib 将发布 2.58 版本。在过去的两个开发周期中,发生了一些变化,最显著的是 Meson 构建的改进,这反过来又提高了 GLib 在 Windows、macOS 和 Android 等平台上的可移植性。现在是时候总结 GLib 的当前状态,并重点介绍一些将影响基于 GLib 代码的更改了。
- Meson – 感谢 Nirbheek Chauhan 和 Xavier Claessens 的持续工作,Meson 构建一直在不断改进,以至于我们可以开始将其作为默认构建系统。该计划 - 正如邮件列表中概述的那样 - 是使用 Meson 发布 GLib 2.58,同时在树中保留 Autotools 构建并在发布存档中可用;然后,我们将在下一个开发周期中删除 Autotools 构建,并在没有 Autotools 支持的情况下发布 GLib 2.60。非常欢迎 Linux 发行商在其构建器中开始测试 Meson 构建;我们已经将 Meson 构建作为我们的CI流程的一部分运行了一段时间,但更多的曝光会暴露出我们遗漏的最终回归;此外,如果使用 GCC/Clang/MSVC 以外的不同工具链的人们开始尝试 Meson 构建并报告错误,那就太棒了。同时,如果您在 macOS 和 Windows 上使用 GLib,我们已经建议您切换到 Meson 来构建 GLib,因为它比 Autotools 更容易且与这些平台更好地集成。
- 可靠性和可移植性 – GLib 与 GNOME 的其余部分一起切换到了 GitLab,这意味着能够在 GNOME Continuous 构建之外运行持续集成。现在我们运行CI针对每次提交和合并请求的多个工具链、多个构建系统和多个平台,这大大降低了构建损坏的可能性。我们还提高了测试套件中的代码覆盖率。当然,我们总是可以做得更好;例如,我们没有CImacOS 和 Solaris 系列操作系统的运行器,如果能为 *BSD 系列提供更多运行器,我们将不胜感激。如果您有空闲机器和一些可以捐赠的带宽,我们已经发出了寻求帮助的呼吁
- *BSD 上的文件监视 – 关于 *BSD 系列,Martin Pieuchot 和 Ting-Wei Lan 完全改进了 GIO 中用于文件监视的
kqueue
后端;新代码更简单、更健壮,并通过了所有测试 - 使用
posix_spawn()
来高效启动进程 – 感谢 Daniel Drake,如果平台的 C 库支持,GLib 现在可以在特定情况下使用posix_spawn()
;与手动调用fork() + exec()
相比,这允许在内核中命中快速路径;这些快速路径在内存受限的平台上运行时特别有利 - 引用计数类型和分配 – GLib 在其许多类型中使用引用计数作为内存管理和垃圾收集机制,但缺乏公共 API 来允许其他人在其自己的数据结构中实现相同的语义;这导致了大量的复制粘贴和重新实现,并且通常会导致在饱和度和线程安全方面出现未定义的行为。GLib 2.58 具有
grefcount
和gatomicrefcount
类型及其 API,以减少这种重复。此外,借鉴 Rust 等其他语言,GLib 提供了一种通过添加低级别 API 来在内存分配上添加引用计数语义的方法,该 API 允许您分配没有引用计数字段的结构,并自动将引用计数语义添加到它们中 - 弃用 – 在最近的这个开发周期中,一些软弃用已变为真正的弃用
-
- 在我们引入实例私有数据宏五年后,
g_type_class_add_private()
最终被弃用,五年;如果您仍在类初始化中使用该函数,请切换到G_DEFINE_TYPE_WITH_PRIVATE
或G_ADD_PRIVATE
g_main_context_wait()
已正式弃用,但您应该已经看到了有关其使用的运行时警告- GLib 提供的 GTest harness
gtester
已弃用;如果您使用的是 Autotools,则应使用TAPAutomake 附带的 harness
- 在我们引入实例私有数据宏五年后,
-
在这个过去的周期中,感谢 Philip Withnall 的不懈努力,GLib 收到了大量的贡献;他在审查补丁、分类错误以及在项目开发过程中实施更改方面发挥了重要作用。切换到 GitLab 也改进了贡献过程,有更多的开发人员打开了合并请求
2.54.0..c182cd68
:来自 143 位开发人员的 968 个变更集,高于 2.53 开发周期期间的 412 个变更集和 68 位开发人员- 总共添加了 31851 行,删除了 27976 行(增量:+3875)
变更集最多的开发人员 | ||
---|---|---|
Philip Withnall | 303 | 31.3% |
Xavier Claessens | 79 | 8.2% |
Emmanuele Bassi | 69 | 7.1% |
Christoph Reiter | 42 | 4.3% |
Ting-Wei Lan | 21 | 2.2% |
Chun-wei Fan | 21 | 2.2% |
Nirbheek Chauhan | 21 | 2.2% |
Ondrej Holy | 20 | 2.1% |
Руслан Ижбулатов | 20 | 2.1% |
Mikhail Zabaluev | 20 | 2.1% |
Simon McVittie | 15 | 1.5% |
Matthias Clasen | 14 | 1.4% |
Christian Hergert | 13 | 1.3% |
Iñigo Martínez | 12 | 1.2% |
Bastien Nocera | 10 | 1.0% |
Rafal Luzynski | 9 | 0.9% |
Michael Catanzaro | 9 | 0.9% |
Will Thompson | 8 | 0.8% |
Allison Lortie | 8 | 0.8% |
Daniel Boles | 8 | 0.8% |
请务必使用 GLib 2.57.2 测试您的代码,这是迈向 2.58.0 稳定版本的下一个开发快照。