Vala

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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:

  1. Installation von Programmen

  2. Einen Editor öffnen

  3. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
    1. Paketquellen
  2. Beispiele
    1. Hello World
  3. Hilfsmittel
  4. Links
    1. Intern
    2. Extern

Wiki/Icons/develop.png 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]:

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]:

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

Intern

Extern