Vala
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Bei Vala und seiner Schwester Genie 🇬🇧 handelt es sich um zwei noch junge Programmiersprachen. Vala erfreut sich zunehmender Beliebtheit unter anderem im GNOME-Projekt. Bekannte Programme, die in Vala entwickelt werden, sind beispielsweise Shotwell, Geary, der Xfce Music Player Client und einige weitere 🇬🇧.
Die beiden modernen Sprachen ermöglichen objektorientierte Programmierung mit dem GObject-Modell. Die Syntax von Vala ist an C# und auch Java angelehnt, die von Genie erinnert in Teilen an Python, Boo und D. Der Vala-Compiler übersetzt den Quellcode in C-Header-Dateien und -Quelltext, der wiederum (standardmäßig) mit dem GNU C Compiler in ausführbaren Maschinencode übersetzt wird. Alternativ kann auch nur der C-Code generiert werden, der dann mit einem beliebigen C-Compiler übersetzt werden kann (z.B. zum Einbinden in C-Projekte).
Installation¶
Unter Ubuntu kann die Installation aus den Paketquellen oder einem PPA mit den aktuellsten Versionen erfolgen. Aufgrund der noch instabilen (aber seit 0.18 fast gleichgebliebenen) Programmierschnittstelle sollte immer die aktuellste Compiler-Version für eigene Projekte verwendet werden.
Paketquellen¶
Der Vala-Compiler kann über die Paketverwaltung installiert werden [1]:
valac
Befehl zum Installieren der Pakete:
sudo apt-get install valac
Oder mit apturl installieren, Link: apt://valac
Falls eine grafische Anwendung erstellt werden soll, muss zusätzlich das GTK+ Entwicklerpaket installiert werden [1]:
libgtk-3-dev
Befehl zum Installieren der Pakete:
sudo apt-get install libgtk-3-dev
Oder mit apturl installieren, Link: apt://libgtk-3-dev
Beispiele¶
Die folgenden Beispiele können in einem Editor [3] erstellt werden.
Hello World¶
GObject-Style¶
Folgendes "Hello World"-Beispiel soll in Grundzügen zeigen, wie mit Vala das GObject-System benutzt wird:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* eine Klasse abgeleitet vom GObject */ public class BasicSample : Object { /* öffentliche Instanz-Methode */ public void run () { stdout.printf ("Hello World\n"); } /* Einstiegspunkt */ public static int main (string[] args) { // eine Instanz der Klasse wird einer // vom Typ abgeleiteten Variablen zugewiesen var sample = new BasicSample (); // Aufruf der run-Methode sample.run (); // Rückgabewert der main-Methode return 0; } } |
Das Kompilieren und Ausprobieren erfolgt im Terminal [4] mittels:
valac helloworld.vala ./helloworld
Um an den C-Quelltext und die Header-Datei zu gelangen, übersetzt man mit dem zusätzlichen Parameter -C
, also:
valac -C helloworld.vala
Der C-Code findet sich nun in der Datei helloworld.c, die z.B. mit gcc kompiliert werden kann:
gcc -Wall `pkg-config --cflags glib-2.0` helloworld.c -o helloworld `pkg-config --libs glib-2.0 gobject-2.0`
Experten-Info:
Mit der Umgebungsvariable CC
kann man direkt den C-Compiler angeben, den valac nutzen soll, z.B. für Clang:
CC=clang valac helloworld.vala
Klassisch¶
Ein simples "Hello World"-Programm kann auch mit dem Einstiegspunkt (main-Funktion) direkt im globalen Scope erstellt werden:
1 2 3 | void main () { stdout.printf ("Hello World\n"); } |
Das Kompilieren erfolgt wie beim GObject-Style.
GTK Fenster¶
Ein GTK "Hello World"-Programm kann auch sehr leicht realisiert werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* eine Fenster Klasse abgeleitet von Gtk.Application */ public class MyApplication : Gtk.Application { protected override void activate () { // ein Fenster mit Titel und Text Hello World! var window = new Gtk.ApplicationWindow (this); var label = new Gtk.Label ("Hello World!"); window.add (label); window.set_title ("Hello World!"); window.set_default_size (400, 250); window.show_all (); } } /* Einstiegspunkt */ public int main (string[] args) { // eine Instanz der Fenster Klasse // wird erzeugt und ausgeführt return new MyApplication ().run (args); } |
Das Kompilieren erfolgt ähnlich wie beim GObject-Style, es muss zusätzlich noch das GTK+ 3.0 Paket mit angegeben werden:
valac --pkg gtk+-3.0 helloworld.vala ./helloworld
Hilfsmittel¶
Anjuta 🇬🇧 - Entwicklungsumgebung
Geany - leichtgewichtige Entwicklungsumgebung
MonoDevelop - Entwicklungsumgebung
Valama 🇬🇧 - Entwicklungsumgebung
Die meisten Editoren bieten Syntaxunterstützung.
Links¶
Intern¶
Programmierung Übersichtsartikel
Extern¶
freiesMagazin 2011-01 🇩🇪 - die Januar-Ausgabe 2011 enthält u.a. einen Artikel über das Programmieren mit Vala