Open Source im professionellen Einsatz
Linux-Magazin Online Artikel/

Interview mit dem Vala-Autor Jürg Billeter

Vorteile kombinieren

08.11.2007

Der Informatikstudent Jürg Billeter war mit GObject-Programmierung in C unzufrieden. Statt sich Mono oder Java zuzuwenden, entwickelte er Vala, eine eigene Sprache samt Compiler, um das Problem zu lösen.

728

Jürg Billeter ist Autor der Programmiersprache Vala und des Vala-Compilers. Sie erleichtern die Entwicklung von Gtk+- und Gnome-Programmen. Linux-Magazin Online sprach mit dem Entwickler, der kurz vor dem Abschluss seines Infomatikstudiums an der ETH Zürich steht, über das Design seiner Sprache.

Linux-Magazin Online: Was waren die ausschlaggebenden Gründe, eine neue Sprache zu erschaffen?

Jürg Billeter: Ich finde das Schreiben von GObject-Code in C zu aufwändig. Auf der einen Seite muss man einiges mehr schreiben als in modernen Programmiersprache und andererseits kann man mit GObject/C auch einiges nicht statisch, also zur Compile-Zeit, überprüfen.

Linux-Magazin Online: Wieso setzt Du nicht auf Mono oder Java? Es gibt ja bereits recht gute Bindings für diese Sprachen?

Jürg Billeter: Mono, Java und Python als Alternativen haben vor allem zwei Nachteile, der eine ist, dass man auf Bibliotheken, welche in diesen Sprachen geschrieben wurden, nicht vernünftig von C und anderen Programmiersprachen aus zugreifen kann. Der andere Grund ist, dass jede zusätzliche Runtime einen gewissen Speicher- und Startup-Overhead mit sich bringt. Gnome startet um einiges langsamer, wenn sich im Panel neben Applets in C auch noch Applets in Python und Mono befinden. Daher habe ich mir gedacht, dass ich die Vorteile von GObject/C und höheren Programmiersprachen kombinieren möchte.

Zur Compile-Zeit prüfen

Linux-Magazin Online: Du hast vorhin angesprochen, dass sich mit GObject/C nicht alles zur Übersetzungszeit überprüfen lässt. Geht das mit Vala? Wie wird das realisiert?

Jürg Billeter: Ein Beispiel sind Upcasts. Wenn du in C zum Beispiel "gtk_widget_show()" mit einem "GtkButton" aufrufen möchtest, so musst du das explizit casten. Also "gtk_widget_show (GTK_WIDGET (button))". Ob das korrekt ist oder nicht kann der C-Compiler nicht entscheiden, das überprüft GObject erst zur Laufzeit. Der Vala-Compiler hat hier mehr Informationen. "button.show()" reicht völlig und wird zur Compile-Zeit überprüft. Das Problem hier ist einfach, dass C die Typen-Hierarchie nicht kennt und deshalb keine impliziten Upcasts wie beispielsweise von "GtkButton" zu "GtkWidget" zulässt.

Linux-Magazin Online: Der Compiler weiß also, dass "button" vom Typ "GtkButton" ist?

Jürg Billeter: Ja, er weiß das und vor allem weiß er, dass "GtkButton" ein "GtkWidget" ist. Einige weitere Checks sind mit Vala möglich, aber noch nicht im aktuellen Compiler eingebaut.

Linux-Magazin Online: Wie wird das konkret realisiert, wo merkt sich Vala die Hierarchie?

Jürg Billeter: Der Vala-Compiler benötigt für alle Libraries eine API-Definitionsdatei, VAPI genannt. In dieser Datei sind alle erforderlichen Informationen über die Library enthalten.

Linux-Magazin Online: Also auch die Klassenhierarchie?

Jürg Billeter: Ja, auch die Klassenhierarchie.

Ein kurzes Code-Beispiel aus den Vala-Webseiten. Die Syntax lehnt sich an Java und C# an.

Speicherverwaltung

Linux-Magazin Online: Ein weiteres Problem bei C beziehungsweise auch bei C++ ist die Speicherverwaltung. Wird da was in Vala getan und wenn ja, was genau? Wo gibt es noch Probleme bei der Umsetzung?

Jürg Billeter: Vala unterstützt den Programmierer bei der Speicherverwaltung. Dazu benutzt Vala das Reference-Counting von GObject. In C muß bei jeder Zuweisung entschieden werden, ob möglicherweise "g_object_ref()" oder "g_object_unref()" aufgerufen werden sollte, um Abstürze und Speicherlecks zu verhindern. Vala arbeitet ähnlich wie Smart-Pointer in C++, das heißt, dass bei jeder Zuweisung der Referenzzähler korrigiert wird. Dies gibt vor allem in einem Punkt Probleme: zyklischer Garbage kann nicht erkannt werden.

Linux-Magazin Online: Gibt es Bereiche, wo der Programmierer noch selbst Hand anlegen muß, also der Compiler nicht intelligent genug ist?

Jürg Billeter: Dazu gibt es die Möglichkeit, Variablen und Felder mit dem "weak"-Modifier zu versehen. "weak"-Referenzen können das Problem in den meisten Fällen lösen, jedoch ist es manchmal nicht ganz einfach zu entscheiden, welche Referenzen als "weak" markiert werden müssen. Das gleiche Problem betrifft auch GObject-/C-Programme, ist also kein zusätzliches Problem von Vala-Programmen.

Linux-Magazin Online: In C# gibt es unter anderem die Möglichkeit, "unsafe"-Code zu schreiben. Bietet Vala dieses Feature an?

Jürg Billeter: Es gibt keine speziellen "unsafe"-Code-Abschnitte in Vala, es ist jedoch experimentell möglich, in beschränktem Maße direkt Zeiger zu verwenden.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • GObject ohne Kopfschmerzen

    Abschied von C: Vala ist eine neue Programmiersprache samt Compiler, die Gnome-Entwicklern die Vorteile moderner Sprachen wie C# oder Java an die Hand gibt.

  • Vala

    Wer Programme mit GTK+ oder für Gnome schreibt, greift dabei meist zu C oder Python. Mit Vala gibt es jedoch eine interessante objektorientierte Alternative. Deren Zauber liegt in sprachlichen Anleihen bei C# und Java sowie in der Integration der Glib-Bibliothek.

  • Vala im Detail

    Die junge High-Level-Sprache Vala erleichtert die Entwicklung von Anwendungen, die auf der GObject-Bibliothek aufsetzen. Dieser Artikel beleuchtet die Eigenschaften und Eigenarten der Sprache genauer.

  • Apt2 beschleunigt Paketsuche

    Der Debian- und Ubuntu-Entwickler Julian Andres Klode berichtet in seinem Blog vom Fortschritt seiner Software Apt2, einer alternativen Umsetzung von Debians Advanced Packaging Tool (Apt).

  • Projekteküche

    Mit Songbird betritt eine neue Softwaregattung namens Webplayer in finaler Version die dicht gedrängte Bühne der Musikabspielprogramme. Außerdem soll Gnome Format eine kleine, aber lästige Lücke im Desktop schließen und setzt dabei auf die innovative Sprache Vala.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.