Vala是否可以不使用GObject?

16

我是Vala的新手,不熟悉GObject。据我所知,GObject来自GNOME的GLib项目。如果我错了,请纠正我。

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

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

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


3
GObject框架不仅仅局限于GNOME桌面环境。你可以在几乎任何形式的Linux甚至Windows上使用GObject库。 - Mindbane
3个回答

11

还有一些类似于Dova和Posix的Vala配置文件。


请注意,在Posix配置文件中不能有类(或者至少只能有[Compact]类)。 - ptomato

8
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 + 其他组件的图形用户界面工具包 - GNOME是基于所有“G”技术的桌面环境 - Vala是一种高级编程语言,旨在减少使用“G”库时C语言中所需的样板代码量。
GTK+最初来自GIMP,后来分成了不同的“G”库,这些库是GNOME今天的基础。
Vala还具有非常强大的绑定机制,使其易于为任何类型的C库编写所谓的“VAPI”文件。
通过正确的VAPI绑定,您不必担心手动内存管理、指针、字符串和数组的零终止以及其他一些让编写正确的C代码变得如此困难的繁琐事情。

4

这里有另一个您可以使用的配置文件Aroop。(请注意,它仍在积极开发中。)我希望它在需要高性能时表现良好。请查看这里的功能


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接