<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Vala_%28Programmiersprache%29</id>
	<title>Vala (Programmiersprache) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Vala_%28Programmiersprache%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Vala_(Programmiersprache)&amp;action=history"/>
	<updated>2026-06-03T03:29:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Vala_(Programmiersprache)&amp;diff=1232682&amp;oldid=prev</id>
		<title>imported&gt;Aka: /* Sonstiges */ Datum ausgeschrieben (Wikipedia:Datumskonventionen)</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Vala_(Programmiersprache)&amp;diff=1232682&amp;oldid=prev"/>
		<updated>2026-01-30T16:37:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sonstiges: &lt;/span&gt; Datum ausgeschrieben (&lt;a href=&quot;/index.php/Wikipedia:Datumskonventionen&quot; title=&quot;Wikipedia:Datumskonventionen&quot;&gt;Wikipedia:Datumskonventionen&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{{Infobox Programmiersprache&lt;br /&gt;
| Name                         = &lt;br /&gt;
| Logo                         = [[Datei:Vala Logo New.svg]]&lt;br /&gt;
| Beschreibung                 = inoffizielles Logo&lt;br /&gt;
| Paradigma                    = [[Objektorientierte Programmierung|objektorientiert]]&lt;br /&gt;
| Erscheinungsjahr             = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVersion              = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVersionFreigabeDatum = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVorabVersion         = &lt;br /&gt;
| Designer                     = &lt;br /&gt;
| Entwickler                   = Rico Tzschichholz (Haupt-), Jürg Billeter, Raffaele Sandrini&lt;br /&gt;
| AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
| Typisierung                  = [[Statische Typisierung|statisch]], [[Starke Typisierung|stark]]&lt;br /&gt;
| Implementierung              = &lt;br /&gt;
| Dialekte                     = &lt;br /&gt;
| Standardisierungen           = &lt;br /&gt;
| Beeinflusst_von              = [[Boo (Programmiersprache)|Boo]], [[C (Programmiersprache)|C]], [[C++]], [[C-Sharp|C#]], [[D (Programmiersprache)|D]], [[Java (Programmiersprache)|Java]]&lt;br /&gt;
| Beeinflusste                 = &lt;br /&gt;
| Betriebssystem               = alle mit [[ANSI C|ANSI-C]]-Compiler, da Vala C-Code erzeugt&lt;br /&gt;
| Lizenz                       = [[LGPL|LGPL 2.1+]]&lt;br /&gt;
| Website                      = https://vala.dev/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vala&amp;#039;&amp;#039;&amp;#039; ist eine [[Objektorientierte Programmierung|objektorientierte]] [[Programmiersprache]], die ab 2006 von Jürg Billeter und Raffaele Sandrini, die an der [[ETH Zürich]] [[Informatik]] studierten, entwickelt wurde.&lt;br /&gt;
&lt;br /&gt;
Vala hat das Ziel, eine moderne Programmiersprache für die Entwicklung mit dem Objektsystem [[GObject]] (das Fundament aller [[GTK+]]-/[[Gnome]]-Anwendungen) zu bieten, ohne die Notwendigkeit einer zusätzlichen [[Laufzeitbibliothek]] (im Gegensatz zu [[Mono (Software)|Mono]] oder [[Java (Programmiersprache)|Java]]). Zudem ist die [[Binärschnittstelle]] kompatibel mit Applikationen und Bibliotheken, die in C geschrieben sind.&lt;br /&gt;
&lt;br /&gt;
Die Vala-Syntax ist stark an die von [[C-Sharp|C#]] und damit auch an die von [[Java (Programmiersprache)|Java]] angelehnt.&lt;br /&gt;
&lt;br /&gt;
== Compiler ==&lt;br /&gt;
Der Vala-Compiler übersetzt den Vala-Quelltext in C-Quelltext und lässt den Rest vom C-Compiler erledigen.&lt;br /&gt;
&lt;br /&gt;
Diese Technik ist für viele Programmiersprachen weniger geeignet, weil sich damit z.&amp;amp;nbsp;B. Exceptions oder arithmetische Überläufe nicht effizient abfangen lassen. Da Vala aber ohnehin direkt auf C-Schnittstellen aufsetzt, fällt diese Einschränkung weniger ins Gewicht als bei Sprachen wie [[Eiffel (Programmiersprache)|Eiffel]] oder [[Haskell (Programmiersprache)|Haskell]].&lt;br /&gt;
&lt;br /&gt;
Der Vorteil ist, dass der C-Compiler bereits Backends für sämtliche [[Prozessorarchitektur]]en mit sich bringt und Vala von dessen Optimierungen profitieren kann. Auch kann ein Entwickler die generierten C-Quelltexte zusätzlich zu den Vala-Quelltexten veröffentlichen, so dass nicht einmal der Vala-Compiler zum Kompilieren des Programms benötigt wird. Dies wird etwa beim Vala-Compiler getan, um das [[Henne-Ei-Problem]] zu lösen, da der Vala-Compiler selbst in Vala geschrieben ist &amp;#039;&amp;#039;(self-hosting)&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Sprache ==&lt;br /&gt;
Im Gegensatz zu [[Objective-C]], sowie mit geringen Ausnahmen [[C++]], ist Vala keine Erweiterung von C, da C keine [[Teilmenge]] der Vala-Syntax ist. Somit ist Vala auch kein C-[[Präprozessor]].&lt;br /&gt;
&lt;br /&gt;
Die [[Syntax]] ist stark an [[C-Sharp|C#]] und damit auch [[Java (Programmiersprache)|Java]] angelehnt, jedoch ist weder Vala eine Teilmenge von C# noch umgekehrt. C#-Programme lassen sich also nicht mit Vala kompilieren, selbst wenn man von den erheblichen Unterschieden der [[Standardbibliothek]]en absieht.&lt;br /&gt;
&lt;br /&gt;
Vala ist [[Statische Typisierung|statisch]] und [[Starke Typisierung|stark]] [[Typisierung (Informatik)|typisiert]] und erlaubt [[Typinferenz]] (implizites Typisieren) für lokale Variablen. Vala bietet unter anderem:&lt;br /&gt;
&lt;br /&gt;
* [[Objektorientierte Programmierung|OOP]] ([[Klasse (Objektorientierung)|Klassen]], [[Vererbung (Programmierung)|Vererbung]], [[Virtuelle Methode]]n, [[Abstrakte Klasse]]n, [[Schnittstelle (Objektorientierung)|Schnittstellen]]/[[Mixin]]s, [[Polymorphie (Programmierung)|Typ-Polymorphie]])&lt;br /&gt;
* [[Namensraum|Namensräume]]&lt;br /&gt;
* Properties (automatische [[Zugriffsfunktion|Getter und Setter]])&lt;br /&gt;
* [[Signal-Slot-Konzept|Signale]]&lt;br /&gt;
* Signalbenachrichtigungen bei Property-Änderungen&lt;br /&gt;
* [[Foreach#Die Foreach-Schleife|Foreach-Schleifen]]&lt;br /&gt;
* [[Lambda-Kalkül|Lambda-Ausdrücke]] / [[Closure (Funktion)|Closures]]&lt;br /&gt;
* [[Generischer Typ|Generische Typen]]&lt;br /&gt;
* Nicht-nullierbare Typen&lt;br /&gt;
* Assistierte Speicherverwaltung (automatische [[Referenzzählung]])&lt;br /&gt;
* [[Determinismus (Algorithmus)|Deterministische]] [[Konstruktoren und Destruktoren|Destruktoren]] (ermöglicht [[Ressourcenbelegung ist Initialisierung|RAII]])&lt;br /&gt;
* [[Ausnahmebehandlung]] (&amp;#039;&amp;#039;Checked Exceptions&amp;#039;&amp;#039;)&lt;br /&gt;
* Asynchrone Methoden ([[Koroutine]]n)&lt;br /&gt;
* Vorbedingungen und Nachbedingungen ([[Design by contract]])&lt;br /&gt;
* [[Runtime Type Information|Typinformation zur Laufzeit]] (RTTI)&lt;br /&gt;
* &amp;#039;&amp;#039;Verbatim Strings&amp;#039;&amp;#039; ([[Zeichenkette]]n ohne Interpretation von [[Escape-Sequenz]]en und über mehrere Zeilen hinweg)&lt;br /&gt;
* Bedingte Kompilierung&lt;br /&gt;
* Statische und dynamische [[D-Bus]]-Unterstützung&lt;br /&gt;
&lt;br /&gt;
=== Speicherverwaltung ===&lt;br /&gt;
Vala nimmt dem Entwickler die manuelle Speicherverwaltung ab. Statt eines [[Garbage Collection|Garbage Collectors]] wie bei Java oder bei [[.NET (Plattform)|.NET]] kommt automatische [[Referenzzählung]] zum Einsatz. Referenzzählung hat den Vorteil, dass sie [[Determinismus (Algorithmus)|deterministisch]] und [[Echtzeitsystem|echtzeitfähig]] ist, jedoch müssen andererseits im Falle von [[Referenz (Programmierung)|Referenz]]-Zyklen diese manuell vom Entwickler durch den Gebrauch einer schwachen Referenz &amp;#039;&amp;#039;(weak reference)&amp;#039;&amp;#039; gebrochen werden; etwa dann, wenn in einer [[Baum (Graphentheorie)|Baum-Datenstruktur]] ein Element eine Referenz auf sein Elternelement hält und dieses wiederum eine Referenz auf das Kindelement, beide also gegenseitig aufeinander verweisen.&lt;br /&gt;
&lt;br /&gt;
Vala erlaubt optional auch manuelle Speicherverwaltung mit [[Zeiger (Informatik)|Zeigern]].&lt;br /&gt;
&lt;br /&gt;
== Bibliotheken ==&lt;br /&gt;
&lt;br /&gt;
=== Binärkompatibilität ===&lt;br /&gt;
In Vala entwickelte Bibliotheken sind valide C-Bibliotheken und können von C-Entwicklern direkt benutzt werden, da Vala im Gegensatz zu Sprachen wie [[C++]] und [[D (Programmiersprache)|D]] zur C-[[Binärschnittstelle]] (ABI) kompatibel ist.&lt;br /&gt;
&lt;br /&gt;
=== Standardbibliothek ===&lt;br /&gt;
Als Standardbibliothek verwendet Vala die [[GLib]] samt ihren Unter-Modulen GIO, [[GObject]], GModule, die für die meisten Systeme verfügbar ist und Dinge wie [[Plattformunabhängigkeit|plattformunabhängiges]] [[Thread (Informatik)|Threading]], [[Eingabe und Ausgabe|Eingabe/Ausgabe]], Dateiverwaltung, Netzwerk-[[Socket (Software)|Sockets]], [[Plug-in]]s, [[Regulärer Ausdruck|Reguläre Ausdrücke]] und vieles mehr bietet. Des Weiteren gibt es eine in Vala geschriebene Bibliothek namens &amp;#039;&amp;#039;Gee&amp;#039;&amp;#039;, die generische [[Container (Informatik)|Collection/Container]]-Klassen zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
[[Grafische Benutzeroberfläche]]n können mit dem [[GUI-Toolkit]] [[GTK+]] und dem Oberflächen-Designwerkzeug [[Glade (Programmierwerkzeug)|Glade]] entwickelt werden.&lt;br /&gt;
&lt;br /&gt;
=== Bindings ===&lt;br /&gt;
Um eine C-Bibliothek mit Vala nutzbar zu machen, sind keine [[Sprachanbindung|Laufzeit-Bindings]] ([[Wrapper (Software)|Wrapper]]) nötig, sondern lediglich eine statische Beschreibung in einer sogenannten &amp;#039;&amp;#039;vapi&amp;#039;&amp;#039;-Datei (Vala [[Programmierschnittstelle|API]]) mit [[Annotation (Programmierung)|annotierter]] Vala-Syntax, die dem Vala-Compiler zur [[Kompilierzeit]] sagt, wie Vala-[[Methode (Programmierung)|Methodenaufrufe]] in C-[[Funktion (Programmierung)|Funktionsaufrufe]] transformiert werden sollen. Diese Dateien lassen sich für GObject-basierte Bibliotheken semi-automatisch generieren, für nicht auf GObject basierende C-Bibliotheken müssen sie von Hand geschrieben werden. Für eine Vielzahl von Bibliotheken sind bereits Bindings vorhanden, unter anderem auch für nicht auf GObject basierende C-Bibliotheken wie die Multimediabibliothek [[Simple DirectMedia Layer|SDL]], [[OpenGL]] etc.&lt;br /&gt;
&lt;br /&gt;
== Plattformen ==&lt;br /&gt;
Valas Basisbibliotheken GLib/GIO und Gee sind auf allen gängigen Plattformen verfügbar, wie etwa verschiedene [[Unix]]e, [[Linux]], [[macOS]] und [[Windows]]. Die einzigen Voraussetzungen für Vala sind die GLib und ein C-Compiler. Vala ist also nicht an [[Gnome]] gebunden. Sofern der Entwickler Dinge wie plattformabhängige Pfadangaben und nicht-plattformübergreifende Bibliotheken vermeidet und stattdessen die Abstraktionen der GLib nutzt, kann er mit Vala plattformübergreifende Anwendungen entwickeln. Auch GTK+ gibt es für die verschiedenen Betriebssysteme. Ein zu [[Binärcode]] kompiliertes Vala-Programm ist an die jeweilige Plattform gebunden, da es dann in Form von [[Maschinensprache|nativem Maschinencode]] vorliegt.&lt;br /&gt;
&lt;br /&gt;
== Verbreitung ==&lt;br /&gt;
Anwendungen, die mit Vala entwickelt wurden und bereits einen gewissen Bekanntheitsgrad erlangt haben, sind etwa die Fotoverwaltung [[Shotwell (Programm)|Shotwell]], der [[Twitter]]-Client Pino und das [[Backup]]-Werkzeug Déjà-Dup. Alle drei sind Standard-Anwendungen der Linux-Distribution [[Fedora (Linux-Distribution)|Fedora]] ab Version 13. Auch in [[Ubuntu (Betriebssystem)|Ubuntu]] 10.10 ist Shotwell die vorinstallierte Fotoverwaltung und hat [[F-Spot]] ersetzt. Ubuntus ursprünglich für [[Netbook]]s entwickelte Oberfläche [[Unity (Benutzeroberfläche)|Unity]] wird in Vala entwickelt, ebenso der [[DLNA]]/[[UPnP]]-Medienserver Rygel, der unter anderem beim GNOME-Projekt eingesetzt wird. Der Vala-Compiler selbst ist ein Beispiel für ein größeres, in Vala geschriebenes Kommandozeilen-Projekt.&lt;br /&gt;
&lt;br /&gt;
Im [[TIOBE-Index]] Stand April 2018 wurde Vala zwischen Platz 51 und 100 gelistet.&amp;lt;ref&amp;gt;https://www.tiobe.com/tiobe-index/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dennoch bezeichnete GNOME-Entwickler Emanuelle Bassi Vala als tote Sprache und riet 2017 davon ab, Vala als Programmiersprache für neue Anwendungen zu wählen.&amp;lt;ref&amp;gt;{{Internetquelle | autor=Emanuelle Bassi | url=https://www.bassi.io/articles/2017/02/13/on-vala/ | titel=halting problem : On Vala | werk=bassi.io | datum=2017-02-13 | abruf=2017-02-13 | sprache=en}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=GNOME-Vala-Bassi&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trotz dieser Ankündigung wird Vala auch weiterhin für Gtk+ basierende Programme eingesetzt, beispielsweise ist es die bevorzugte Sprache der [[elementary OS]] Entwickler und erhielt im Juni 2022 auch eine eigene Website.&lt;br /&gt;
&lt;br /&gt;
== Codebeispiele ==&lt;br /&gt;
Ein minimales [[Hallo-Welt-Programm]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vala&amp;quot;&amp;gt;&lt;br /&gt;
void main() {&lt;br /&gt;
    print(&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine komplexere Variante, die einige [[Objektorientierte Programmierung|objektorientierte]] Eigenschaften von Vala demonstriert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vala&amp;quot;&amp;gt;&lt;br /&gt;
class Sample: Object {&lt;br /&gt;
    void run() {&lt;br /&gt;
        stdout.printf(&amp;quot;Hallo Welt!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    static void main(string[] args) {&lt;br /&gt;
        var sample = new Sample();&lt;br /&gt;
        sample.run();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Codebeispiel demonstriert ein einfaches [[GTK+]]-Programm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vala&amp;quot;&amp;gt;&lt;br /&gt;
using Gtk;&lt;br /&gt;
&lt;br /&gt;
int main (string[] args) {&lt;br /&gt;
    Gtk.init(ref args);&lt;br /&gt;
&lt;br /&gt;
    var window = new Window();&lt;br /&gt;
    window.title = &amp;quot;Ein einfaches GTK+ Programm&amp;quot;;&lt;br /&gt;
    window.set_default_size(300, 50);&lt;br /&gt;
    window.window_position = WindowPosition.CENTER;&lt;br /&gt;
    window.destroy.connect(Gtk.main_quit);&lt;br /&gt;
&lt;br /&gt;
    var button = new Button.with_label(&amp;quot;Klick mich!&amp;quot;);&lt;br /&gt;
    button.clicked.connect(() =&amp;gt; {&lt;br /&gt;
        button.label = &amp;quot;Dankeschön&amp;quot;;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    window.add(button);&lt;br /&gt;
    window.show_all();&lt;br /&gt;
&lt;br /&gt;
    Gtk.main();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Programm initialisiert GTK+, erzeugt ein Hauptfenster, setzt dessen Titel, Größe und Position, fügt dem Fenster eine [[Schaltfläche]] hinzu und verbindet deren [[Signal-Slot-Konzept|Signal]], das bei einem Mausklick ausgelöst wird, mit einer anonymen [[Rückruffunktion]], welche die Beschriftung der Schaltfläche ändert, und startet schließlich die [[Ereignisschleife|Hauptereignisschleife]] von GTK+.&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
Vala hat eine Schwestersprache namens Genie, die ebenfalls die Vala-Compiler-Infrastruktur nutzt und eine [[Python (Programmiersprache)|Python]]-ähnliche Syntax mit statischer Typisierung hat. Genie wird von den Vala-Entwicklern jedoch als veraltet angesehen und auch die Genie-Seite des Gnome-Webs ist eingestellt worden.&amp;lt;ref&amp;gt;https://gitlab.gnome.org/GNOME/vala/-/issues/1473 (abgerufen am 10. Januar 2026)&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://wiki.gnome.org/Projects/Genie (abgerufen am 10. Januar 2026)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur | Autor=Christian Meyer | Titel=Vala - Sprache und Compiler für das GObject-Typensystem | TitelErg=GObject ohne Kopfschmerzen | Sammelwerk=Linux-Magazin | Band=6 | Datum=2007-11-07 | Online=[https://web.archive.org/web/20170517210101/http://www.linux-magazin.de/Online-Artikel/GObject-ohne-Kopfschmerzen Online] | Abruf=2019-08-13}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://wiki.gnome.org/Projects/Vala Website des Vala-Projektes]&lt;br /&gt;
* [https://wiki.gnome.org/Projects/Vala/Tutorial Vala-Tutorial]&lt;br /&gt;
* [https://valadoc.org Online-API-Dokumentation]&lt;br /&gt;
* [https://wiki.gnome.org/Projects/Vala/Examples Vala-Beispielcode]&lt;br /&gt;
* [http://www.freiesmagazin.de/ftp/2011/freiesMagazin-2011-01.pdf Programmieren mit Vala] (PDF; 1,8&amp;amp;nbsp;MB) – Artikel in &amp;#039;&amp;#039;freiesMagazin&amp;#039;&amp;#039;, Ausgabe 01/2011&lt;br /&gt;
* [http://www.linux-magazin.de/Online-Artikel/Vorteile-kombinieren Vorteile kombinieren] – Interview mit dem Vala-Autor Jürg Billeter (8. November 2007)&lt;br /&gt;
* [https://jpaflacerda.wordpress.com/2011/11/08/vala-benchmarking/ Benchmarkvergleich zwischen C++, Mono, C und Vala] (8. November 2011, englisch)&lt;br /&gt;
* [https://valasprache.wordpress.com Vala Tutorial für Java-Entwickler] (2. April 2012)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:GTK (Programmbibliothek)]]&lt;br /&gt;
[[Kategorie:Objektorientierte Programmiersprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aka</name></author>
	</entry>
</feed>