Mittwoch, 23. Januar 2013

Ein Blick auf Vala

Vala ist eine Programmiersprache, die seit 2006 im Linux-Umfeld verfügbar ist. Ich habe mich daran gesetzt, ein kleines Projekt in Vala auszuführen und hier mein Resümee.

Compiler und Tools

Der Vala Compiler und  etwaige Bibliotheken konnte ich einfach aus den Ubuntu Paketquellen beziehen. 

IDE

Niemand lernt gerne Buildskripte oder kryptische Kommandozeilenbefehle oder tippt in einem Texteditor herum. Ernsthaftes Programmieren findet daher normalerweise in einer IDE, einer integrierten Entwicklungsumgebung statt. Für Vala sieht es da ziemlich mau aus. Ich habe MonoDevelop verwendet und das dafür verfügbare Vala-Plug-In installiert, beides aus den Ubuntu Paketquellen. Für Windows... nun, Pech gehabt.

Die Guten, die Schlechten und die Hässlichen

Die IDE funktioniert, ist aber sehr langsam. Debugging ist eine Qual. Gut, das hat nichts mit Vala zu tun, zeigt aber, dass sich da nicht unbedingt viele Gedanken gemacht wurden. Ich habe den Eindruck, dass Vala dringend eine richtige IDE benötigt.
Die Dokumentation (kontextsensitive Hilfe) ist bestenfalls als rudimentär zu bezeichnen, bei mir fiel sie zwischenzeitlich gerne auch aus. Also immer wieder lästig in der Online-Dokumentation herumsuchen, die überdies oft nicht mehr als nur die Signatur von Methoden, Signalen und Properties zu bieten hat. Zu wenig Beispiele, zu wenig Dokumentation, ... das Leben des Vala-Programmierers ist hart, denn letztendlich muss er doch immer wieder in die C-Quellen der Bibliotheken schauen. Vala fehlt, wie den meisten Open-Source-Projekten, eine vernünftige Dokumentation.
Wobei wir schon beim nächsten Punkt wären: C. Vala ist C# in vielen Dingen sehr ähnlich (es gibt Signale/Events, Properties, viele gleiche Schlüsselwörter, ...), man merkt jedoch stark, dass Vala auf Biegen und Brechen mit dem steinalten und unkomfortablen C kompatibel sein muss und dass es stark mit der Linux-Welt (besonders GNOME) verbandelt ist. Beispiele gefällig?
  • Methoden überladen - geht nicht. Methoden unterschiedlicher Signatur müssen unterschiedliche Namen haben. Das mag für einen C-Programmierer wenig ausmachen, ist aber wirklich nicht mehr Stand der Technik.
  • GObject und co. - Vala nutzt die Infrastruktur von GObjekt sehr heftig, hat sie aber nicht richtig in die Sprache integriert. Wenn faktisch jede Klasse ohnehin von GLib.Objekt ableitet muss - warum ist das nicht in die Sprache integriert und ich muss es immer wieder angeben? So fühlt sich Vala immer wieder als Wrapper für GObject und Konsorten an, seien es Signale oder das lästige Speichermanagement. Es sind die technischen Schwächen von C und GObject, wegen derer man sich in Vala mit den owned und unowned Schlüsselwörtern herumschlagen muss, wegen derer Multithreading stellenweise kompliziert ist (siehe yield), wegen derer man sich Gedanken ums Speichermanagement machen muss (das tun Ada, Java und C# selbstständig).
  • Es fehlt an plattformübergreifenden Bibliotheken. Python, Java, JavaScript, Ruby, C#, Delphi, Ada, diese Sprachen sind erfolgreich, weil sie einen umfangreichen Satz an Bibliotheken mitbringen, die immer und überall verfügbar sind. In Vala muss man sie sich erst besorgen. Das mag für einen C-Programmierer Alltag sein, als moderner Programmierer ist es aber einfach nur lästig.
Jedoch bringt Vala auch einige nette syntaktische Neuigkeiten mit, die C# noch vermissen lässt:
  • Default-Werte für Properties.
  • Das aus C# bekannte INotifyPropertyChanged Interface, mit dem man Wertänderungen eines Properties mitgeteilt bekommt, wird in Vala praktisch automatisch umgesetzt, weil GObject es kann.

Fazit

Für einen C# Programmierer (oder Java...) hat Vala wenig zu bieten, es ist vor allen Dingen sehr schlecht dokumentiert und es fehlen Beispiele, die IDE und das Tooling sind eher dürftig. Für größere oder plattformagnostische Projekte ist das einfach zu unbequem. Will man aber ein kleines Programm für Linux schreiben und kennt sich ohnehin schon in den gängigen Linux-Bibliotheken aus, so ist Vala eine sehr gute Alternative zu C, C++ und anderen Katastrophen und spart tatsächlich Zeit. So findet man in der Liste der in Vala geschriebenen Projekte denn auch fast nur kleine Progrämmchen.

Dennoch: Unter Linux wird Vala wohl längere Zeit überdauern, weil Unity und Zeitgeist (beide Teil von Ubuntu) damit entwickelt werden.

Will man größere Projekte schreiben oder plattformunabhängig sein oder mehr Dokumentation haben, so sollte man statt Vala lieber eine andere Sprache nutzen. Von denen, die Ubuntu vorschlägt, scheinen mir QML, C#, JavaScript und Python die geeigneteren Alternativen zu sein.

1 Kommentar:

  1. Im Groben und Ganzen finde ich alles richtig, aber ein Punkt fehlt mir: Wenn man mit Vala eine Library erstellt, kann man diese auch in anderen Programmiersprachen verwenden (Java, C#, ...), da erst C Code und daraus dann die .so-Datei plus Header erzeugt werden kann.
    Tatsächlich fehlt noch sehr viel, um mit vala ohne Schwierigkeiten effektiv zu arbeiten; ich persönlich hoffe, dass sich das mal ändert.

    AntwortenLöschen