TLDR:我建议将 Vala 与 GLib/GObject 一起使用,因为它是在它们之上设计的。
虽然 valac 可能有其他配置文件,但它们要么未完成,要么已弃用。
Vala 的全部意义在于减少用 C 语言编写 GLib 和 Gtk+ 应用程序所需的样板代码量。
它还对 C 进行了一些不错的其他改进,例如字符串和数组是简单的数据类型,而不是容易出错的指针。
它主要包含了 GObject 中存在的所有概念,例如:
- 类
- 属性
- 继承
- 代表
- 异步方法
- 引用计数(在 C + GObject 中是手动的,在 Vala 中是自动的,也称为 ARC)
- 对象的类型安全
- 泛型
- 可能更多...
所有这些概念都可以在不使用 GObject/GLib/Gio 的情况下实现,但这意味着基本上重写 GObject/GLib/Gio 没有多大意义。
如果您不想编写 GUI 应用程序,GLib 也可用于编写控制台应用程序,在 Vala 中使用 GIO 或 GTK+ 是可选的,应用程序也可以在无头服务器上运行。
我认为 Qt 中甚至有一些努力最终会切换到 GLib 主循环,这将使 Qt 和 GLib 的互操作性变得更加容易。
使用 GLib 的框架的一个很好的例子是 GStreamer,它也用于不同的桌面环境。
总结:
- GLib 是一个基本的跨平台应用程序框架
- GObject 是 GLib 生态系统使用的对象系统
- GIO 是基于 GLib + GObject 的 I/O 抽象(网络、文件系统等)
- GTK+是基于GLib + GObject + GIO + others的图形UI工具包
- GNOME 是基于所有“G”技术的桌面环境
- Vala 是一种高级编程语言,旨在减少使用 C 语言中的“G”库所需的样板。
GTK+ 最初来自 GIMP,后来被拆分为不同的“G”库,这些库是当今 GNOME 的基础。
Vala 还具有非常强大的绑定机制,可以轻松为任何类型的 C 库编写所谓的“VAPI”文件。
使用正确的 VAPI 绑定,您不必担心手动内存管理、指针、字符串和数组的零终止以及其他一些使编写正确的 C 代码变得如此困难的乏味事情。