Vala 可以在没有 GObject 的情况下使用吗?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

GObject 框架不绑定到 gnome 桌面环境。您可以在几乎任何形式的 linux 甚至 Windows 上使用 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。

【讨论】:

以上是关于Vala 可以在没有 GObject 的情况下使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Vala 为 iPhone 编码吗?

Vala GUI 和 C++ 中的逻辑

Vala 生成的 C 代码比手写的 C 代码优化了多少?

如何从 Vala 编译器生成 GIR 文件?

Vala 和 Genie 的生产准备好了吗? [关闭]

安卓版的瓦拉?