Vala 编程/简介/历史
Vala 仍处于积极开发阶段,某些特性可能会随着时间推移而发生变化。 |
Vala 的语法类似于 C#,但进行了修改以更好地适应 GObject 类型系统。Vala 支持以下现代语言特性:
- 接口
- 属性
- 信号
- Foreach
- Lambda 表达式
- 局部变量的类型推断
- 泛型
- 非空类型
- 辅助内存管理
- 异常处理
- 类型模块(插件)
Vala 旨在允许访问现有的 C 库,尤其是基于 GObject 的库,而无需运行时绑定。使用 Vala 库所需的一切只是一个 API 文件,其中包含用 Vala 语法编写的类和方法声明。Vala 目前附带了 GLib 和 GTK+ 的实验性绑定。计划在稍后阶段提供针对完整 GNOME 平台的生成绑定。
从用 C 编写的应用程序中使用用 Vala 编写的类和方法并不困难。Vala 库只需要安装生成的头部文件,然后 C 应用程序就可以像往常一样访问 Vala 库的基于 GObject 的 API。由于 Vala 解析器是用库编写的,因此也应该很容易编写绑定生成器来访问来自例如 C# 编写的应用程序的 Vala 库,以便在生成绑定时可以使用所有编译时信息。
许多开发者希望使用高级编程语言编写 GNOME 应用程序和库,但由于各种原因无法或不想使用 C# 或 Java 或 Python 或 Ruby 或 Perl 或 Lua 或 Haskell 或 Erlang 或 C++……,因此他们只能使用 C,而没有对 GObject 类型系统的语法支持。Vala 编译器允许开发者快速编写复杂的面向对象代码,同时保持标准的 C API 和 ABI,并保持较低的内存需求。
C# 和 Java 库无法像本机 GObject 库那样从 C 和其他语言中使用,并且不能作为 GNOME 平台的一部分被接受。托管应用程序通常还具有更高的内存需求,这在某些情况下是不可接受的。
Vala 编译器 (valac) 从 Vala 源文件生成 C 源文件和头文件,就像您直接用 C 编写库或应用程序一样。从 C 应用程序使用 Vala 库与使用任何其他基于 GObject 的库没有区别。不会有 vala 运行时库,并且应用程序可以将其生成的 C 代码与它们的 tarball 一起分发,因此用户没有额外的运行时或构建时依赖项。