Wikipedia

Vala (programming language)

Vala
Vala Logo.svg
ParadigmMulti-paradigm: imperative, structured, object-oriented
DeveloperJürg Billeter, Raffaele Sandrini
First appeared2006
Stable release
0.50.2[1] / 19 November 2020
Preview release
0.49.92 / 4 September 2020
Typing disciplinestatic, strong
OSCross-platform all supported by GLib, but distributed as source code only.
LicenseLGPLv2.1+
Filename extensions.vala, .vapi
Websitewiki.gnome.org/Projects/Vala
Influenced by
C, C++, C#, D, Java, Boo

Vala is an object-oriented programming language with a self-hosting compiler that generates C code and uses the GObject system.

Vala is syntactically similar to C# and includes notable features such as anonymous functions, signals, properties, generics, assisted memory management, exception handling, type inference, and foreach statements.[2] Its developers, Jürg Billeter and Raffaele Sandrini, wanted to bring these features to the plain C runtime with little overhead and no special runtime support by targeting the GObject object system. Rather than compiling directly to machine code or assembly language, it compiles to a lower-level intermediate language. It source-to-source compiles to C, which is then compiled with a C compiler for a given platform, such as GCC.[3]

For memory management, the GObject system provides reference counting. In C, a programmer must manually manage adding and removing references, but in Vala, managing such reference counts is automated if a programmer uses the language's built-in reference types rather than plain pointers.

Using functionality from native code libraries requires writing vapi files, defining the library interfacing. Writing these interface definitions is well-documented for C libraries, especially when based on GObject. However, C++ libraries are not supported. Vapi files are provided for a large portion of the GNOME platform, including GTK.

Vala was conceived by Jürg Billeter and was implemented by him and Raffaele Sandrini, finishing a self-hosting compiler in May 2006.[4]

Code example

A simple "Hello, World!" Vala program:

void main  { print ("Hello World\n"); } 

A more complex version, showing some of Vala's object-oriented features:

class Sample: Object { void greeting  { stdout.printf ("Hello World\n"); } static void main (string[] args) { var sample = new Sample ; sample.greeting ; } } 

Sample code to show Vala interface with default implementation (mixin)

using GLib; interface Printable { public abstract string print ; public virtual string pretty_print  { return "Please " + print ; } } class NormalPrint: Object, Printable { string print  { return "don't forget about me"; } } class OverridePrint: Object, Printable { string print  { return "Mind the gap"; } public override string pretty_print  { return "Override"; } } void main (string[] args) { var normal = new NormalPrint ; var overridden = new OverridePrint ; print (normal.pretty_print ); print (overridden.pretty_print ); } 

An example using GTK to create a GUI "Hello, World!" program (see also GTK hello world):

using Gtk; int main (string[] args) { Gtk.init (ref args); var window = new Window ; window.title = "Hello, World!"; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size (350, 70); window.destroy.connect (Gtk.main_quit); var label = new Label ("Hello, World!"); window.add (label); window.show_all ; Gtk.main ; return 0; } 

The last example needs an extra parameter to compile on GNOME 3 platforms:

valac --pkg gtk+-3.0 hellogtk.vala 

See also

  • Genie, a programming language for the Vala compiler with a syntax closer to Python.
  • Shotwell, an image organiser written in Vala.
  • Geary, an email client written in Vala.
  • elementary OS, a Linux distribution with a desktop environment programmed mostly in Vala.

References

  1. ^ "Vala - Compiler Using the GObject Type System". GNOME Project. News section. Retrieved 17 December 2020.
  2. ^ "Vala: high-level programming with less fat". Ars Technica. Retrieved 13 December 2011.
  3. ^ "A look at two new languages: Vala and Clojure".
  4. ^ "Writing Multimedia Applications with Vala". Archived from the original on 28 August 2012.

External links

Comparison with other languages
This article is copied from an article on Wikipedia® - the free encyclopedia created and edited by its online user community. The text was not checked or edited by anyone on our staff. Although the vast majority of Wikipedia® encyclopedia articles provide accurate and timely information, please do not assume the accuracy of any particular article. This article is distributed under the terms of GNU Free Documentation License.

Copyright © 2003-2025 Farlex, Inc Disclaimer
All content on this website, including dictionary, thesaurus, literature, geography, and other reference data is for informational purposes only. This information should not be considered complete, up to date, and is not intended to be used in place of a visit, consultation, or advice of a legal, medical, or any other professional.