来自 Guadec GTK+ BoF 的报告

GTK+ 团队在 Guadec 的 BoF 日程中进行了一整天的计划会议,并且房间里挤满了人,包括来自多个下游(不仅仅是 GNOME)的代表。

我们也有一个相当紧凑的 议程

GTK+ 3

我们首先回顾了我们之前 概述的 GTK+ 3 计划。

除了那里提到的内容外,我们还计划向后移植新的事件控制器,以使移植到 GTK+ 4 更容易。我们还将添加 meson 构建支持以帮助 Windows 构建。

3.24 版本将有效地成为 3.22 分支的延续,并且应该完全可以安全地作为稳定更新发布到发行版中。

我们计划在 GNOME 3.30 发布时及时发布 GTK+ 3.24.0。

GTK+ 4 剩余工作

当天的大部分时间都用于讨论 GTK+ 4。我们回顾了路线图上的剩余任务列表

  • 完成 DND:GTK+ 级别的姿势、本地快捷方式
  • 引入 GtkToplevel 并干净地支持弹出窗口
  • 添加转换
  • 创建一个快捷方式事件控制器来替换键绑定
  • 将 GtkTextView 移植到渲染节点
  • 分析 cairo 后端,确保其性能与 GTK+ 3 相当
  • 移植各种依赖库
    • vte
    • webkit
    • libchamplain
    • gtk-vnc
    • gtk-spice

这些任务中的大多数都有名称,但如果您想帮助完成这些任务中的任何一个,请务必联系我们!

值得注意的是,此列表中缺少之前在路线图上的一些内容

  • 基于约束的布局 (emeus)
  • 着色器编译器和应用程序提供的着色器
  • 设计器支持

如果出现合并请求,所有这些仍然可以发生,但我们认为我们不应该阻止它们。它们可以在 GTK+ 4 外部开发,并成为 GTK+ 5 的素材。

GTK+ 后端

我们花了一些时间评估 GTK+ master 中 GDK 后端的状态。

Windows 后端的状态良好。我们有几个人帮助维护和开发它的功能,meson 使构建它容易得多,并且我们有它的 ci。

Quartz 后端的状态更糟。它没有保持在可构建的状态,没有人为其提供修复或功能开发,而且我们没有 ci。我们提供了一台可以用于 ci 的 macbook,并且有人建议我们可以将 travis ci 用于 OS X。

GTK+ 时间表

我们在这方面花费了很长时间,但没有达成 100% 的共识,但如果我们继续在未完成的工作上取得良好进展,那么在 2019 年春季发布 GTK+ 4 似乎是现实的目标。

当我们发布 GTK+ 3.96 时,我们还将宣布 GTK+ 4.0 的发布日期。我们希望能够在 GNOME 3.32 之前发布,以便 GNOME 应用程序开发人员可以将他们的主分支切换到 GTK+ 4,而不必担心这会中断 3.32 的其他开发。

应用程序移植

我们目前真的希望从应用程序端口获得反馈。但是我们处于一个有点困难的境地,因为在 GtkToplevel 和快捷方式控制器工作完成之前,我们不能合理地声称已经完成主要的 API 工作。

我们目前给应用程序作者的建议是

  • 如果您有点冒险精神,请在分支上移植到 3.94。在 GTK+ 4 开发的剩余时间内,应该可以在不进行太多工作的情况下保持其工作。
  • 如果您没有那么冒险,请等到 3.24 发布,使用它来准备您的移植,然后移植到 GTK+ 3.96。
  • 无论如何,请将您的移植提供给用户进行测试,无论是作为定期发布还是作为捆绑了 GTK+ 的 Flatpak。

GLib 分流

下午,我们花了一些时间讨论 GLib。我们回顾了一系列较大和较小的项目。值得注意的亮点:GProperty 可能会在 2.60 中出现,我们可能很快就可以使用 g_autoptr。

其他想法

我们讨论了许多其他我们可以而且应该做的事情。

例如,有人建议(并普遍同意)我们应该将 gsk 合并到 gdk 中,因为它很小并且内部结构有些交织。还建议在 gtk/ 中创建子目录,例如用于 css 机制。

来自 GLib 2.58 的新闻

今年 9 月,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 具有 grefcountgatomicrefcount 类型及其 API,以减少这种重复。此外,借鉴了 Rust 等其他语言,GLib 提供了一种在内存分配上添加引用计数语义的方法,通过添加一个低级 API,允许您分配没有引用计数字段的结构,并自动向其添加引用计数语义
  • 弃用 – 在上一个开发周期中,一些软弃用已成为真正的弃用
      • g_type_class_add_private() 终于被弃用了,在我们引入实例私有数据宏 五年后;如果您仍在类初始化中使用该函数,请切换到 G_DEFINE_TYPE_WITH_PRIVATEG_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 稳定版本的下一个开发快照。