【问题标题】:Can Vala be used without GObject?Vala 可以在没有 GObject 的情况下使用吗?
【发布时间】:2012-03-21 22:36:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • GObject 框架不绑定到 gnome 桌面环境。您可以在几乎任何形式的 linux 甚至 Windows 上使用 GObject 库。

标签: vala gobject


【解决方案1】:

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

【讨论】:

  • 请注意,您不能在 Posix 配置文件中包含类(或至少只有 [Compact] 类)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2013-05-28
      • 2015-12-27
      • 2011-02-15
      • 2017-12-31
      • 2019-01-31
      • 2016-08-11
      • 2021-08-10
      • 2016-03-06
      相关资源
      最近更新 更多