Vala (Programmiersprache)

Vala
Vala Logo.svg
Paradigma Multi-Paradigma: Imperativ, strukturiert, objektorientierter
Entwickler Jürg Billeter, Raffaele Sandrini
Erstmals erschienen 2006; Vor 16 Jahren
Stabile Version
  • 0,56,2[1] / 14. Juli 2022; Vor 21 Tagen
Disziplin tippen Statisch, stark, gefolgert, strukturell
OS Plattformübergreifend alle unterstützt von Glib, aber nur als Quellcode verteilt.
Lizenz LGPLV2.1+
Dateiname -Erweiterungen .Vala, .vapi
Webseite Vala.dev
Beeinflusst von
C, C ++, C#, D, Java, Boo

Vala ist ein objektorientierter Programmiersprache mit einer Selbsthost-Compiler das erzeugt C Code und verwendet die Gobject System.

Vala ist syntaktisch ähnlich zu C# und beinhaltet bemerkenswerte Funktionen wie z. Anonyme Funktionen, Signale, Eigenschaften, Generika, Assisted Memory Management, Ausnahmebehandlung, Geben Sie Inferenz ein, und für jeden Aussagen.[2] Die Entwickler, Jürg Billeter und Raffaele Sandrini, wollten diese Merkmale in die Ebene bringen C Laufzeit mit wenig Overhead und ohne spezielle Laufzeitunterstützung durch das Ziel des Gobjekts Objekt System. Anstatt direkt an Maschinencode oder Montagesprache zu kompilieren, kompiliert es auf eine niedrigere Ebene Zwischensprache. Es Quelle-zu-Source-Kompilierung bis c, das dann mit einem C -Compiler für eine bestimmte Plattform zusammengestellt wird, wie z. GCC oder Klang.[3]

Verwenden von Funktionen aus dem nativen Code Bibliotheken erfordert das Schreiben von VAPI -Dateien, das Definieren der Bibliothek Schnittstellen. Das Schreiben dieser Schnittstellendefinitionen ist für C-Bibliotheken gut dokumentiert, insbesondere wenn sie auf dem Gobjekt basieren. Bindungen sind bereits für eine große Anzahl von Bibliotheken verfügbar, einschließlich für C -Bibliotheken, die nicht auf Gobject basieren, z. B. die Multimedia -Bibliothek SDL, OpenGL, etc.

Beschreibung

Vala ist eine Programmiersprache, die die kombiniert hohes Level Aufbauzeitleistung von Skriptsprachen mit der Laufzeitleistung von niedriger Ebene Programmiersprachen. Ziel ist es, moderne Programmiersprachmerkmale zu bringen Gnom Entwickler ohne zusätzliche Laufzeitanforderungen und ohne andere zu verwenden Abi, im Vergleich zu Anwendungen und Bibliotheken in C. Die Syntax von Vala ist ähnlich wie C#, modifiziert, um das Gobjekt -Typ -System besser anzupassen.[4]

Geschichte

Vala wurde von Jürg Billeter konzipiert und von ihm und Raffaele Sandrini umgesetzt, die sich eine höhere Alternative für die Entwicklung wünschten Gnom Anwendungen anstelle von C. sie mochten die Syntax und die Semantik von C#, wollten aber nicht verwenden MonoAlso beendeten sie einen Compiler im Mai 2006. Anfangs war es das Bootstraße Mit C und ein Jahr später (mit Veröffentlichung von Version 0.1.0 im Juli 2007) wurde der Vala -Compiler selbst veranstaltet. Ab 2021 der aktuelle stabile Freisetzungszweig mit Langzeitunterstützung ist 0,48 und die Sprache wird aktiv entwickelt, um eine stabile Version 1.0 zu veröffentlichen.[5]

Ausführung Veröffentlichungsdatum[6]
Alte Version, nicht mehr gepflegt: 0.0.1 2006-07-15
Alte Version, nicht mehr gepflegt: 0,1,0 2007-07-09
Alte Version, nicht mehr gepflegt: 0,10.0 2010-09-18
Alte Version, nicht mehr gepflegt: 0.20.0 2013-05-27
Alte Version, nicht mehr gepflegt: 0,30,0 2015-09-18
Alte Version, nicht mehr gepflegt: 0,40,0 2018-05-12
Alte Version, nicht mehr gepflegt: 0,42.0 2018-09-01
Alte Version, nicht mehr gepflegt: 0,44,0 2019-05-09
Alte Version, nicht mehr gepflegt: 0,46,0 2019-09-05
Aktuelle stabile Version: 0,48,18 2021-06-09
Aktuelle stabile Version: 0,50,9 2021-06-04
Aktuelle stabile Version: 0,52,4 2021-06-04
Legende:
Alte Version
Ältere Version, noch gepflegt
Letzte Version
Neueste Vorschau -Version
Zukünftige Veröffentlichung
Für alte Versionen sind nur erste Punktveröffentlichungen aufgeführt

Sprachdesign

Merkmale

Vala verwendet GLIB und seine Submodule (Gobject, Gmodule, GThread, GIO) als Kernbibliothek, die für die meisten verfügbar ist Betriebssysteme und bietet Dinge wie Plattform unabhängig Fäden, Input-Output, Dokumentenverwaltung, Netzwerkstücken, Plugins, Reguläre Ausdrückeusw. Die Syntax von Vala unterstützt derzeit moderne Sprachmerkmale wie folgt:

Grafische Benutzeroberflächen kann mit dem entwickelt werden Gtk GUI -Toolkit und die Lichtung GUI -Erbauer.

Speicherverwaltung

Für die Speicherverwaltung bietet das GTYPE- oder Gobject -System Referenzzählung. In C muss ein Programmierer das Hinzufügen und Entfernen von Referenzen manuell verwalten, aber in Vala wird die Verwaltung solcher Referenzzählungen automatisiert, wenn ein Programmierer die integrierten Referenztypen der Sprache verwendet und nicht einfache Zeiger. Das einzige Detail, über das Sie sich Sorgen machen müssen, besteht darin, die Erzeugung zu vermeiden ReferenzzyklenDenn in diesem Fall funktioniert dieses Speicherverwaltungssystem nicht korrekt.[7]

Vala ermöglicht auch eine manuelle Speicherverwaltung mit Zeiger als eine Option.

Bindungen

Vala soll den Laufzeitzugriff auf vorhandene C-Bibliotheken, insbesondere auf basierte Bibliotheken, ohne die Laufzeitbindungen gewähren. Um eine Bibliothek mit Vala zu verwenden, ist nur eine API -Datei (.vapi) mit der Klasse und Methodendeklarationen in der Vala -Syntax enthalten. C ++ -Bibliotheken werden jedoch nicht unterstützt. Gegenwärtig wird VAPI für einen großen Teil des GNU Projekt- und Gnome -Plattform sind in jeder Version von Vala einschließlich enthalten Gtk. Es gibt auch eine Bibliothek namens Gee, die in Vala geschrieben wurde, die gentechnische Schnittstellen und Klassen für häufig verwendete bietet Datenstrukturen.[8]

Es sollte auch leicht möglich sein, einen Bindungsgenerator für den Zugriff auf Vala-Bibliotheken aus Anwendungen zu schreiben, die in anderen Sprachen geschrieben wurden, z. B. C#, wie der Vala-Parser als Bibliothek geschrieben ist .

Werkzeug

Redakteure

In den letzten Jahren hat sich die Instrumente für die Entwicklung von Vala erheblich verbessert. Das Folgende ist eine Liste einiger beliebter Ides und Textredakteure Mit Plug-Ins, die Unterstützung für die Programmierung in Vala hinzufügen:

Code -Intelligenz

Derzeit entwickeln sich zwei aktiv entwickeln Sprachserver welches Angebot Code -Intelligenz Für Vala wie folgt:

  • Benwaffle/Vala-Sprache-Server, der für jeden Redakteur entwickelt wurde, der unterstützt Lsp, einschließlich VSCODE, VIM und GNOME Builder[12]
  • Esodan/GVLs, derzeit der Standardsprachserver für Vala im Gnome Builder und unterstützt jeden Editor mit Unterstützung für Lsp[13]

Systeme bauen

Derzeit gibt es eine Reihe von einer Reihe von Systeme bauen Unterstützung von Vala, einschließlich Automake, Cmake, Meson, und andere.[14]

Debuggen

Debugging für Vala -Programme kann mit beiden durchgeführt werden GDB oder LLDB. Zum Debuggen IdesAnwesend

Beispiele

Hallo Welt

Eine einfache "Hallo Welt!"Programm in Vala:

Leere hauptsächlich () { 	drucken ("Hallo Welt\n"); } 

Wie bemerkt werden kann, gibt es im Gegensatz zu C oder C ++ keine Header -Dateien in Vala. Die Verknüpfung zu Bibliotheken wird durch Angabe durchgeführt -Pkg Parameter beim Kompilieren. Darüber hinaus ist die Glib -Bibliothek immer verknüpft und ihr Namespace kann weggelassen werden (drucken ist in der Tat Glib.print).

Objekt orientierte Programmierung

Unten finden Sie eine komplexere Version, die eine Unterklasse definiert Hallo Welt Erben der Basisklasse Glib.object, auch bekannt als die Gobject Klasse. Es zeigt einige von Vala's objektorientierter Merkmale:

Klasse Hallo Welt: Objekt { 	Privatgelände uint Jahr = 0; 	 	Öffentlichkeit Hallo Welt () { 	} 	 	Öffentlichkeit Hallo Welt.mit _year (int Jahr) { 		wenn (Jahr>0) 			Dies.Jahr = Jahr; 	} 	Öffentlichkeit Leere Gruß () { 		wenn (Jahr == 0) 			drucken ("Hallo Welt\n"); 		anders 			/* Strings, die mit '@' vorangestellt sind, sind String -Vorlagen. */ 			drucken (@"Hallo Welt, $ (this.year)\n");  	} } Leere hauptsächlich (Saite[] Args) { 	var Hallo Welt = Neu Hallo Welt.mit _year (2021); 	Hallo Welt.Gruß (); } 

Wie im Fall von Gobjektbibliothek, Vala unterstützt nicht Mehrfacherbe, aber eine Klasse in Vala kann eine beliebige Anzahl von implementieren Schnittstellen, die Standardimplementierungen für ihre Methoden enthalten können. Hier ist ein Beispiel -Code, um eine Vala -Schnittstelle mit Standardimplementierung zu demonstrieren (manchmal als als als bezeichnet mischen))

Verwendung Glib; Schnittstelle Druckbar { 	Öffentlichkeit abstrakt Saite drucken (); 	Öffentlichkeit virtuell Saite Pretty_print () { 		Rückkehr "Bitte " + drucken (); 	} } Klasse Normalprint: Objekt, Druckbar { 	Saite drucken () { 		Rückkehr "Vergiss mich nicht"; 	} } Klasse Überredeprint: Objekt, Druckbar { 	Saite drucken () { 		Rückkehr "Achten Sie auf die Lücke"; 	} 	Öffentlichkeit überschreiben Saite Pretty_print () { 		Rückkehr "Überschreiben"; 	} } Leere hauptsächlich (Saite[] Args) { 	var normal = Neu Normalprint (); 	var überschrieben = Neu Überredeprint (); 	drucken (normal.Pretty_print ()); 	drucken (überschrieben.Pretty_print ()); } 

Signale und Rückrufe

Im Folgenden finden Sie ein grundlegendes Beispiel, um zu zeigen, wie ein Signal in einer nicht kompakten Klasse definiert werden kann, das ein Signalsystem enthält, das von Vala durch Glib eingebaut ist. Dann zurückrufen Funktionen sind im Signal einer Instanz der Klasse registriert. Die Instanz kann das Signal ausgeben und jede Rückruffunktion (auch als Handler bezeichnet), die mit dem Signal für die Instanz verbunden ist, wird in der Reihenfolge aufgerufen, in der sie verbunden waren:

Klasse Foo {  Öffentlichkeit Signal Leere SEHLE_EVENT ();  // Definition des Signals  Öffentlichkeit Leere Methode () {  SEHLE_EVENT ();  // das Signal emittieren (Rückrufe werden aufgerufen)  } } Leere callback_a () {  Stdout.printf ("Rückruf a\n"); } Leere callback_b () {  Stdout.printf ("Rückruf b\n"); } Leere hauptsächlich () {  var Foo = Neu Foo ();  Foo.SEHLE_EVENT.verbinden (callback_a);  // Verbinden der Rückruffunktionen  Foo.SEHLE_EVENT.verbinden (callback_b);  Foo.Methode (); } 

Fäden

Ein neuer Faden In Vala befindet sich ein Teil des Codes, wie z. B. eine Funktion, die zur gleichzeitigen Ausführung zur Laufzeit gebeten wird. Die Erstellung und Synchronisation neuer Threads erfolgt mit der Verwendung der Faden Klasse in Glib, das die Funktion als Parameter beim Erstellen neuer Threads nimmt, wie im folgenden (sehr vereinfachten) Beispiel gezeigt:

int Frage() {  // einige Druckvorgänge   zum (var i = 0; i < 3; i++) {  drucken (".");  Faden.du schläfst (800000);  Stdout.spülen ();  }  Rückkehr 42; } Leere hauptsächlich () {  wenn (!Faden.unterstützt ()) {  Stderr.printf ("Ohne Thread -Unterstützung kann nicht ausgeführt werden.\n");  Rückkehr;  }  drucken ("Die ultimative Frage des Lebens, des Universums und alles");  // Generischer Parameter ist der Typ des Rückgabewerts  var Faden = Neu Faden<int> ("Frage", Frage);  drucken(@"$ (thread.join ())\n"); } 

Grafische Benutzeroberfläche

Unten ist ein Beispiel mit Verwendung Gtk a GUI "Hallo Welt!" Programm (siehe auch GTK Hallo Welt) in Vala:

Verwendung Gtk; int hauptsächlich (Saite[] Args) { 	Gtk.drin (Ref Args); 	var Fenster = Neu Fenster (); 	Fenster.Titel = "Hallo Welt!"; 	Fenster.Rahmenbreite = 10; 	Fenster.window_position = Fensterposition.CENTER; 	Fenster.set_default_size (350, 70); 	Fenster.zerstören.verbinden (Gtk.Main_quit); 	var Etikett = Neu Etikett ("Hallo Welt!"); 	Fenster.hinzufügen (Etikett); 	Fenster.zeige alles (); 	Gtk.hauptsächlich (); 	Rückkehr 0; } 

Die Aussage Gtk.main () schafft und beginnt a Hauptschleife Hören auf Ereignisse, die über Signale an die Rückruffunktionen weitergegeben werden. Wie dieses Beispiel verwendet die Gtk Paket, es braucht ein Extra -Pkg Parameter (der aufruft PKG-Konfiguration in der C Backend) kompilieren:

Valac-PKG GTK+-3.0 Hellogtk.vala

Siehe auch

  • Genie, eine Programmiersprache für den Vala -Compiler mit einer Syntax näher an Python.
  • Shotwell, ein in Vala geschriebener Bildorganisator.
  • Ausrüstung, ein E -Mail -Client in Vala.
  • Elementares Betriebssystem, eine Linux -Verteilung mit einer Desktop -Umgebung, die hauptsächlich in Vala programmiert ist.
  • Wellensittich, eine Linux -Desktop -Umgebung, die hauptsächlich in Vala programmiert ist.

Verweise

  1. ^ "Vala - Compiler mit dem Gobject Types System". GNOME -Projekt. Nachrichtenabteilung. Abgerufen 16. Juli 2022.
  2. ^ "Vala: Programmierung auf hoher Ebene mit weniger Fett". ARS Technica. 2. September 2007. Abgerufen 13. Dezember 2011.
  3. ^ "Ein Blick auf zwei neue Sprachen: Vala und Clojure".
  4. ^ "Vala · Gitlab". Gnom. Abgerufen 16. März 2021.
  5. ^ Michael Lauer (2019). Einführung der Vala -Programmierung. doi:10.1007/978-1-4842-5380-9. ISBN 978-1-4842-5379-3. S2CID 207911698. Abgerufen 16. März 2021.
  6. ^ "Vala veröffentlicht". VALA -Projekt. Abgerufen 18. März 2021.
  7. ^ "Valas Speichermanagement erklärt".
  8. ^ "Libgee auf Gitlab".
  9. ^ a b "Codierung in Vala mit Visual Studio -Code". Abgerufen 17. März 2021.
  10. ^ "Codierung in Vala mit dem VIM -Texteditor". Abgerufen 17. März 2021.
  11. ^ "Aktivieren Sie die Vala -Syntax -Hervorhebung und den Code -Browser -Unterstützung in GNU -EMACs". Abgerufen 17. März 2021.
  12. ^ "Benwaffle/Vala-Sprache-Server auf Github". GitHub. Abgerufen 17. März 2021.
  13. ^ "Esodan/GVLs auf Gitlab". Abgerufen 17. März 2021.
  14. ^ "Vala -Werkzeuge". Abgerufen 29. März 2021.

Externe Links

Vergleich mit anderen Sprachen