[[Vorlage(Getestet, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/develop.png, 48, align=left)]] Bei [wikipedia:Vala_(Programmiersprache):Vala] und seiner Schwester [http://live.gnome.org/Genie Genie] {en} 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 [https://live.gnome.org/Vala/Documentation#Projects_Developed_in_Vala einige weitere] {en}. Die beiden modernen Sprachen ermöglichen objektorientierte Programmierung mit dem [wikipedia:GObject:GObject-Modell]. Die Syntax von Vala ist an [wikipedia:C-Sharp:C#] und auch [:Java:] angelehnt, die von Genie erinnert in Teilen an [:Python:], [wikipedia:Boo (Programmiersprache):Boo] und [wikipedia:D (Programmiersprache):D]. Der Vala-Compiler übersetzt den Quellcode in C-Header-Dateien und -Quelltext, der wiederum (standardmäßig) mit dem [:GCC: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]: {{{#!vorlage Paketinstallation valac }}} Falls eine grafische Anwendung erstellt werden soll, muss zusätzlich das GTK+ Entwicklerpaket installiert werden [1]: {{{#!vorlage Paketinstallation 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: {{{#!code vala /* 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: {{{#!vorlage Befehl valac helloworld.vala ./helloworld }}} Um an den C-Quelltext und die Header-Datei zu gelangen, übersetzt man mit dem zusätzlichen Parameter `-C`, also: {{{#!vorlage Befehl valac -C helloworld.vala }}} Der C-Code findet sich nun in der Datei '''helloworld.c''', die z.B. mit [:GCC:gcc] kompiliert werden kann: {{{#!vorlage Befehl gcc -Wall `pkg-config --cflags glib-2.0` helloworld.c -o helloworld `pkg-config --libs glib-2.0 gobject-2.0` }}} {{{#!vorlage Experten Mit der [:Umgebungsvariable:] `CC` kann man direkt den C-Compiler angeben, den valac nutzen soll, z.B. für [wikipedia:Clang:]: {{{#!vorlage Befehl CC=clang valac helloworld.vala \}}} }}} === Klassisch === Ein simples "Hello World"-Programm kann auch mit dem Einstiegspunkt (main-Funktion) direkt im globalen Scope erstellt werden: {{{#!code vala void main () { stdout.printf ("Hello World\n"); } }}} Das Kompilieren erfolgt wie beim [#GObject-Style GObject-Style]. === GTK Fenster === Ein GTK "Hello World"-Programm kann auch sehr leicht realisiert werden: {{{#!code vala /* 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 GObject-Style], es muss zusätzlich noch das GTK+ 3.0 Paket mit angegeben werden: {{{#!vorlage Befehl valac --pkg gtk+-3.0 helloworld.vala ./helloworld }}} = Hilfsmittel = * [http://anjuta.org/ Anjuta] {en} - Entwicklungsumgebung * [:Geany:] - leichtgewichtige Entwicklungsumgebung * [:MonoDevelop:] - Entwicklungsumgebung * [github:Valama/valama:Valama] {en} - Entwicklungsumgebung * Die meisten [:Editoren:] bieten Syntaxunterstützung. = Links = == Intern == * [:Programmierung:] {Übersicht} Übersichtsartikel == Extern == * [http://live.gnome.org/Vala Vala Projektseite] {en} * [http://live.gnome.org/Vala/Documentation Dokumentation] {en} * [http://www.freiesmagazin.de/freiesMagazin-2011-01 freiesMagazin 2011-01] {de} - die Januar-Ausgabe 2011 enthält u.a. einen Artikel über das Programmieren mit Vala #tag: Programmierung, Vala