今年九月,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 系列,GIO 中用于文件监控的
kqueue
后端已由 Martin Pieuchot 和 Ting-Wei Lan 完全改造;新代码更简单、更健壮,并且通过了所有测试。 - 使用
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 稳定版本的下一个开发快照。