- Getting Started
using GLib;然后存储为hello.vala,在运行以下命令:
public class Sample : Object {
public Sample () {
}
public void run () {
stdout.printf ("Hello, world!\n");
}
static int main (string[] args) {
var sample = new Sample ();
sample.run ();
return 0;
}
}valac -o hello hello.vala生成了可执行文件hello。
- Vala source file
- Vala conventions(Vala编程风格)
Vala源文件通常包含一个主要的public class,并且是根据这个来命名源文件。一个常用的选择是将主要的class的名字变成小写的,并且加上namespace作为前缀作文件名。对于小的工程可能是多余的所以排除在外。以上的要求都不是必须的只是一个约定。
我们不鼓励在一个单独的vala源文件之中包含超过一个的namespace。namespace通常是用来分开一系列的源文件,但是namespace通常不会被工程之外使用。每个库或者程序会通常有一个主要的namespace,让其他的元素嵌入在内。
在源文件以下的命名规则通常被使用:
- Namespaces命名为驼峰风格:NameSpaceName
- Classes命名为驼峰风格:ClassName
- Method名字都是小写的并且用下划线来分开字:method_name
- Constants(和emumerated类型的值)是全部大写的,文字间用下划线分开:CONSTANT_NAME
- Vala syntax(Vala语法)
Vala的语法以C#为原形,所以它是一种C风格的语言。大括号是基本的界线标志着一个声名或代码块的开始。
尽管vala和许多vala的工程中使用了一种标准形式,Vala中却没有空格的要求。这形式是一种glib和gnome工程使用的编码风格,但是这种形式在这篇文档中没有被讨论,除了被所有的例子使用。
Vala的声名顺序是很灵活的,声名之前你不需要为了使用而事先声名任何东西。
不论是本地变量还是类名,变量名都是有相同的命名规则。合法的变量名必须包含字母或者下划线。把语言的关键字作为变量名也是可能的,只要在关键字前面加上”@”即可,而且在使用这种命名方式时”@”并不是所谓变量名的一部分,它只是告知编译器这个标识符是一个变量。
- GType and Gobject
Vala使用的运行时类型系统叫做GType。GType系统允许vala中的所有类型包括基础类型在运行时被确认。一个vala开发者在大多数情况下不需要了解GType,因为所有的和系统的交互都是自动的。
GType提供Vala一种强大的对象模型叫做GObject。所有的类型都继承于Glib.Object类,这个模型提供了比如properties和signals那样的特性。
GType和GObject是完全的运行时类型系统,打算对动态类型语言有用。Vala首先是一种静态类型的语言,然后也被设计成不能使用所有的GType和GObject特性。作为代替vala使用一种条例清晰的设置来支持特别的编程风格。
Vala被设计成很少使用GType和GObject。只有几种情况下才使用,大部分情况是当使用已存的库,或需要使用系统的一部分。这些情况都在这篇文档中被指出。
- Memory management(内存管理)
Vala自动使用了Glib中的内存管理,这是一个引用计算系统(以后会解释)。为了使这个也能工作,这个使用的类型必须支持引用计算,所以使用的类型是必须由GObject继承的。
Vala对内存的分配和初始化是必须的。内存管理方案意味着有的时候也是可行的。Vala中没有垃圾收集器和引用循环的自动断裂。这可能会导致内存的泄露。主要的避免这种情况的方法是用弱引用——那是不被计算的引用所以不会阻止内存被释放,但是这样会导致可能会指向不存在的数据。
Vala也允许我们使用指针(象C一样)。一个指针的实例直接代表着内存的地址。指针不是引用,因此自动内存管理规则对指针没用。
详细的关于内存管理的描述以后会说明。
- Vala compilation(Vala编译器)
Vala程序和库在被编译成机器语言之前先被翻译成C语言。这一步是完全透明的除非你要求,否则就其本身而言这不是经常被要求知道细节的。
当要进行一个比默认的valac更复杂的编译或连接过程时,valac可以被指示只输出中间的C语言形式的程序。每个vala源文件被转换成一个C头文件和一个C源文件。那些C文件可以被编译不需要任何的来自vala工具或库的帮助。
只有在一种情况下需要被提醒,当vala的特性不能被C替代时生成的C API不会和vala一模一样。例如私有struct成员对于C是毫无意义的。这些问题在这篇文档内会被提出。
- Application entry point(程序入口)
所有的vala程序在被执行时会被调用“main”函数。这必须要一个非实例方法,但是可能存在内部的namespace或class。如果函数以一个string数组作为参数,它会在执行时传递参数给程序。如果返回一个int类型,这个值会在程序终止时被传递给使用者。这个入口函数可能不会被传递任何参数或着返回其他类型,以下是正确的定义方法:
void main () { ... }
int main () { ... }
void main (string[] args) { ... }
int main (string[] args) { ... }
原英文文档地址:http://www.vala-project.org/doc/vala-draft/
转帖请注明,本贴来自:http://swinging-breeze.blogspot.com/2009/02/vala1.html
没有评论:
发表评论