我是新来的瓦拉。我不熟悉GObject。据我了解,GObject 是从 GNOME 的 GLib 项目中分离出来的。如我错了请纠正我。
我非常喜欢 Vala 的语法和实现,但我并不打算为 GNOME 编写桌面应用程序。
我也知道(我想我知道)Vala 除了 GObject 本身之外没有标准库。
所以我的问题是:Vala 可以在没有 GObject 的情况下使用吗?如果可以,它是否可用(是否有用于类型转换、数学、字符串操作、缓冲区等常见事物的最佳和维护的基础库......可用)?
还有其他一些 Vala 配置文件,例如Dova和 Posix。
TLDR:我建议将 Vala 与 GLib/GObject 一起使用,因为它是在它们之上设计的。
虽然 valac 可能有其他配置文件,但它们要么未完成,要么已弃用。
Vala 的重点是减少用 C 语言编写 GLib 和 Gtk+ 应用程序所需的样板代码量。
它还对 C 进行了一些不错的其他改进,例如字符串和数组是简单的数据类型,而不是容易出错的指针。
它主要包含了 GObject 中存在的所有概念,例如:
所有这些概念都可以在不使用 GObject/GLib/Gio 的情况下实现,但这意味着基本上重写 GObject/GLib/Gio 没有多大意义。
如果您不想编写 GUI 应用程序,GLib 也可用于编写控制台应用程序,在 Vala 中使用 GIO 或 GTK+ 是可选的,应用程序也可以在无头服务器上工作。
我认为 Qt 甚至需要付出一些努力才能最终切换到 GLib 主循环,这将使 Qt 和 GLib 的互操作性变得更加容易。
使用 GLib 的框架的一个很好的例子是 GStreamer,它也用于不同的桌面环境。
总之:
GTK+ 最初来自 GIMP,后来被分成不同的“G”库,这些库是当今 GNOME 的基础。
Vala 还具有非常强大的绑定机制,可以轻松地为任何类型的 C 库编写所谓的“VAPI”文件。
使用正确的 VAPI 绑定,您不必担心手动内存管理、指针、字符串和数组的零终止以及其他一些使编写正确的 C 代码变得如此困难的乏味事情。