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

thw*_*hwd 15 gobject vala

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

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

我也知道(我想知道)Vala没有GObject本身以外的标准库.

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

ant*_*oyo 9

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


Jen*_*off 5

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 +的图形UI工具包
  • GNOME是基于所有"G"技术的桌面环境
  • Vala是一种高级编程语言,旨在减少锅炉板使用C语言中的"G"库.

GTK +最初来自GIMP,后来被分成了不同的"G"库,这些库是今天GNOME的基础.

Vala还具有非常强大的绑定机制,可以轻松地为任何类型的C库编写所谓的"VAPI"文件.

使用正确的VAPI绑定,您不必担心手动内存管理,指针,字符串和数组的零终止以及使编写正确的C代码变得如此困难的一些其他繁琐的事情.