15

我是新来的瓦拉。我不熟悉GObject。据我了解,GObject 是从 GNOME 的 GLib 项目中分离出来的。如我错了请纠正我。

我非常喜欢 Vala 的语法和实现,但我并不打算为 GNOME 编写桌面应用程序。

我也知道(我想我知道)Vala 除了 GObject 本身之外没有标准库。

所以我的问题是:Vala 可以在没有 GObject 的情况下使用吗?如果可以,它是否可用(是否有用于类型转换、数学、字符串操作、缓冲区等常见事物的最佳和维护的基础库......可用)?

4

3 回答 3

10

还有其他一些 Vala 配置文件,例如Dova和 Posix。

于 2012-03-03T21:36:19.273 回答
6

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 代码变得如此困难的乏味事情。

于 2016-09-22T10:53:52.057 回答
3

这是您可以使用Aroop的另一个配置文件。(请注意,它仍在大力开发中)。如果您需要高性能,我希望它是好的。请在此处检查功能

于 2012-08-09T12:03:20.557 回答