Vala (程式語言)

Vala係一隻物件導向嘅程式語言，由自己整嘅編譯器產生C語言代碼，仲用咗GObject系統，畀用戶喺Gnome運行嗰陣庫嘅基礎上用大量現代嘅編程技巧。通過用GLib同埋GObject，Vala提供咗動態類型系統同基於引用計數系統嘅內存管理嘅功能。

Vala結合咗腳本語言嘅高級編程語言建造時間性能，同低級嘅編程語言運行時間性能。相較喺用C寫成嘅應用同埋庫，佢致力喺將現代編程語言特徵帶畀GNOME開發者，而唔使強加任何額外嘅運行時間要求，並且唔使用唔同嘅ABI。Vala嘅語法同C#好似，為咗更好咁適應GObject類型系統而做咗修改。

歷史

例子 
下面係Vala 嘅 Hello World程式：

void main{
    print ("Hello World\n");
}

物件導向
下面喺更複雜啲嘅版本，表現咗Vala嘅物件導向特性：

class HelloWorld: Object {
	private uint year = 0;

public HelloWorld{
	}

public HelloWorld.with_year (int year) {
		if (year>0)
			this.year = year;
	}

public void greeting{
		if (year == 0)
			print ("Hello World\n");
		else
			/* Strings prefixed with '@' are string templates. */
			print (@"Hello World, $(this.year)\n"); 
	}
}

void main (string[] args) {
	var helloworld = new HelloWorld.with_year (2021);
	helloworld.greeting ();
}

喺GObject庫入面，Vala用唔到多重繼承，但係Vala入面嘅類可以實現任何數量嘅接口，所以可以用嚟補返缺失。下面呢段代碼就係佢補返嘅方法：
using GLib;

interface Printable {
	public abstract string print ();

public virtual string pretty_print{
		return "Please " + print ();
	}
}

class NormalPrint: Object, Printable {
	string print{
		return "don't forget about me";
	}
}

class OverridePrint: Object, Printable {
	string print{
		return "Mind the gap";
	}

public override string pretty_print{
		return "Override";
	}
}

void main (string[] args) {
	var normal = new NormalPrint ();
	var overridden = new OverridePrint ();

print (normal.pretty_print ());
	print (overridden.pretty_print ());
}

工具

編輯器
Vala嘅開發工具呢幾年有咗顯著嘅改進。下面係一啲用到Vala插件嘅流行IDE同埋文本編輯器：
 GNOME Builder
 Visual Studio Code，有Vala嘅插件
 Vim，有arrufat/vala.vim嘅插件
 Emacs，有vala-mode
 Atom 
 Geany

代碼智能
依家有兩個活躍開發嘅語言服務器幫Vala整咗：
 benwaffle/vala-language-server，設計用喺用到LSP嘅任何編輯器，包括VSCode、vim同埋GNOME Builder。
 esodan/gvls，目前係Vala喺GNOME Builder入面嘅缺省語言伺服器，佢對喺所有用LSP嘅編輯器都用到。

elementary OS，呢隻Linux發行版有好多功能都係用Vala寫出嚟嘅

The Vala Programming Language, on GNOME Live!
關於Vala語言嘅書《Introducing Vala Programming》 
Vala 開發者同 Java 開發者介紹Vala 嘅特性
開發者同 C# 開發者介紹Vala 嘅特性
 Benchmark of Vala versus C# and C
Vala 語言編程規範
Vala 嘅語言伺服器項目： VLS， GVLS
Vala 語言社區： The Vala community on GitHub 
Vala 語言案例列表
Vala 語言開發嘅數據庫管理工具： DBKangaroo
Vala 語言庫：官方庫
Vala 語言庫：第三方庫

程式語言