Login
Login-Name Passwort


 
Newsletter
Werbung

Do, 3. Februar 2011, 15:00

Programmieren mit Vala

Sie ist die neue Hoffnung unter den Programmiersprachen – für GObject, für GNOME und für jene, die den Gegensatz zwischen Performance und Programmierkomfort schon immer für überwindbar gehalten haben. Auch die neue Desktop-Oberfläche Unity für das nächste Ubuntu-Release ist ein Kind ihrer Möglichkeiten: Die Programmiersprache Vala.

Woher, wohin, wofür?

Neue Programmiersprachen haben es schwer: Es gibt kaum Bindungen, nur schlechte Unterstützung in den IDEs und eine Laufzeitoptimierung, die zu wünschen übrig lässt. Das ist ein Schicksal, das die wenige Jahre alte Sprache Vala nicht kennengelernt hat. Denn Vala setzt auf das Unix-Urgestein schlechthin: C. Der Vala-Compiler valac kann auch als (äußerst komplexer) Präprozessor gesehen werden. Er nimmt das C# ähnelnde Vala entgegen und spuckt reines C aus, das wie gewohnt mit gcc zur Binärdatei wird. Der Vater des Projekts heißt Jürg Billeter und hat 2006 mit der Entwicklung von Vala begonnen, um eine Sprache zu kreieren, die die Vorteile von C ohne weiteren Laufzeit-Overhead mit denen moderner Programmiersprachen versöhnen möchte.

Doch tatsächlich ist Vala ein Produkt einer noch viel längeren Entwicklung. Bereits mit GObject, dem einstig auf GTK+ beschränkten Objektsystem, hat man gängige Vorteile der Objektorientierung in die C-Welt mitgebracht. GObject bildet damit die Grundlage für die GNOME-Desktopumgebung und etliche GTK+-Anwendungen, wobei es unter anderem die Funktionalität bietet, um zur Laufzeit Objekte zu erzeugen, Vererbung umzusetzen und Signale mit Callbacks zu verknüpfen. Durch das Objektsystem erhält der Programmierer auch eine automatische Speicherverwaltung in Form einer Referenzzählung. Für die Syntax von C bleibt Objektorientierung jedoch ein Fremdwort. Auch der Typ eines mit GObject geschriebenen Objekts ist in C dem Compiler nicht bekannt. Vala ist jedoch eine rundum neue Sprache, die in GObject/C-Code übersetzt wird und damit viele Vorteile von C, GObject und Sprachen wie C# unter einen Hut bringt. Die neue Sprache ist unter GNOME-Entwicklern längst kein Geheimtipp mehr. So ist die vorinstallierte Fotoverwaltung von Ubuntu »Maverick Meerkat« nicht mehr das in Mono/C# geschriebene F-Spot, sondern das komplett mit Vala entwickelte Shotwell.

Vala und seine Umgebung

Auch wenn vom Vala-Projekt des Öfteren betont wird, dass man nicht in Konkurrenz mit Mono/C# treten möchte, sondern für beides Platz in der OSS-Welt sehe, zwingt sich der Vergleich mit Mono mehr oder weniger von selbst auf. Die Sprachanbindungen für Vala sind mittlerweile zahlreicher als für Mono/C#. Das liegt nicht zuletzt an dem von Vala verwendeten Format zur Beschreibung von Programmierschnittstellen. Diese Vapi-Dateien lassen sich für C-Bibliotheken – sofern diese sich an bestimmte Konventionen halten – nahezu automatisch generieren, aber auch bei ausgefalleneren APIs sind diese leicht von Hand zu schreiben. Plug-ins für den Browser Epiphany und den Editor gedit können schon längst in Vala geschrieben werden, denn die Bindings dazu werden automatisch generiert, da die APIs auf GObject beruhen. Möglich macht das die gemeinsame Sprachgrundlage C, denn der Vala-Compiler braucht nur die nötigen Informationen, wie die C-API im fertigen C-Code zu verwenden ist; gesonderte Aufrufe von Systemfunktionen durch p/invoke oder Ähnliches wie bei C# sind nicht nötig. Bindings existieren mittlerweile schon fast für die gesamte GNOME-Plattform. Da aber auch mit Vala geschriebene Bibliotheken letztendlich Bibliotheken auf C-Basis sind, sind diese auch aus anderen Programmiersprachen leicht zugänglich. Vala integriert sich nahtlos in den existierenden Sprachkosmos und setzt dabei lediglich die schlanke glib voraus, ist also keineswegs auf GNOME beschränkt. Genausowenig wie Vala auf eine bestimmte Plattform beschränkt ist, denn der erzeugt C-Code ist so portabel wie die darin verwendeten Bibliotheken.

Die wichtigsten Stationen einer in Vala geschriebenen Bibliothek

Andreas Obergrusberger

Die wichtigsten Stationen einer in Vala geschriebenen Bibliothek

Die Syntax von Vala fühlt sich sehr C#-ähnlich an und auch die Features von Vala schlagen da keine neuen Wege ein: Von Einfachvererbung, Interfaces, Lambdas über Polymorphismus, Events (Signals in Vala) bis hin zu Delegaten ist alles dabei. Auch eine vollständige Introspektion, also Auskunft über Datentypen zur Laufzeit, kann mit der Bibliothek GObjectIntrospection erreicht werden.

Zu den wichtigsten Unterschieden ist wohl die fehlende Überladung von Methoden und Operatoren in Vala zu nennen. Auch partielle Klassen und partielle Methoden haben sich die Vala-Entwickler gespart. Genaueres kann in der ausführlichen Dokumentation der Sprache, die auch alle Features auflistet, entnommen werden.

Vala-Entwicklung mit der IDE Anjuta

Andreas Obergrusberger

Vala-Entwicklung mit der IDE Anjuta

Doch abgesehen von der Syntax und den Sprachfeatures braucht sich Vala, auch was den Entwicklungskomfort im Hinblick auf Tools und IDEs angeht, mittlerweile nicht mehr verstecken. Mit valencia und vtg existieren bereits zwei Plug-ins für GNOMEs Standardeditor gedit. Auch Monodevelop und Anjuta liefern Plug-ins mit und die valaspezifische IDE namens Valide kann sich für kleinere Projekte schon im Produktiveinsatz sehen lassen. Symbolbrowser, Autocompletion und Calltips lassen hier bereits selbstverständliche Features wie Syntax-Highlighting banal erscheinen.

Auf valadoc.org wurde außerdem eine Webseite eingerichtet, auf der sich bequem in den APIs der meisten von Vala unterstützen Bibliotheken stöbern lässt. Diese Dokumentationen werden automatisch vom Programm valadoc anhand der Vapi-Dateien generiert.

Ausführliche Beschreibungen von Funktionen und Klassen sucht man bei weniger bekannten Bibliotheken jedoch vergeblich – hier muss man als Entwickler oft auf die Dokumentation der nativen APIs der Bibliotheken zurückgreifen oder direkt in den unübersichtlicheren Vapi-Dateien suchen.

In bekannte Buildsysteme wie autotools und waf ist Vala bereits integriert. Etwas mehr Expertise ist hingegen beim Debugging gefragt, denn Vala ist, abgesehen von einzelnen Patches, noch nicht in gdb integriert und so muss sich der Entwickler beim Debuggen mit dem generierten C-Code herumschlagen anstatt mit dem eigentlichen Vala-Code. Trotzdem gestaltet sich dank zahlreicher Beispiele und Tutorials der Einstieg in die Vala-Welt angenehm leicht – und noch leichter für jene, die bereits Erfahrungen mit C# oder Java gesammelt haben.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung