Vala è un linguaggio di programmazione di alto livello, orientato ad oggetti. Il linguaggio è utilizzabile nelle distribuzioni GNU/Linux, ma esiste già un port per Windows. Esiste un dialetto del linguaggio in stile Python chiamato Genie.

Caratteristiche Vala ha una sintassi simile al C#, e include utili funzionalità di linguaggio come le funzioni anonime, i segnali, le proprietà, la gestione della memoria assistita, la gestione delle eccezioni, inferenza dei tipi, e le dichiarazioni foreach. Offre inoltre un compilatore self-hosting, con funzionalità di garbage collection.

I vantaggi del linguaggio sono la modernità e la velocità, i sorgenti infatti passano per un generatore di codice C utilizzando il sistema GObject, questo codice può essere rivisto e corretto manualmente, successivamente il codice viene poi compilato tramite GCC in modo tale che gli eseguibili siano supportati in modo nativo.

Compilazione I sorgenti vala hanno estensione .vala, e il compilatore è chiamato valac. #Compila il file e crea un eseguibile con nome impostato $ valac ./miofile.vala -o=nomefile

#Genera solo codice oggetto $ valac ./miofile.vala -c

Per generare solo i sorgenti C e i rispettivi file header:

#Crea i sorgenti C $ valac ./miofile.vala -C

#Crea i sorgenti C e il file header $ valac ./miofile.vala -C -H miofile.h

Sintassi La sintassi assomiglia a quella di Java e C#.

Commenti Sono accettati i seguenti commenti:

//Questo è un commento in riga e termina alla fine della stessa

/* <--Inizio commento * Questo è un commento su più righe * <-- questi asterischi sono inseriti per convenzione ma non sono necessari <--è accettato lo stesso fine commento --> */

La sintassi dei commenti di documentazione è /** <-- inizio commento

fine commento --> */

All'interno dei commenti di documentazione è possibile usare la sintassi XHTML, la sintassi Wiki, quella Gnome e quella Java.

Tipi di dato Vala supporta un set di tipi di dato simile agli altri linguaggi.

Byte: char, uchar; Caratteri: unichar; Interi: int, uint; Interi lunghi: long, ulong; Interi corti: short, ushort; Altri interi int8, int16, int32, int64 e rispettivamente uint8, uint16, uint32, uint64; Numeri in virgola mobile: float, double; Booleani: bool; Tipi strutturati: struct; Enumeration: enum;

Utilizzo: /* Tipi atomici */ unichar c = 'u'; float percentile = 0.75f; const double MU_BOHR = 927.400915E-26; bool the_box_has_crashed = false;

/* dichiarazione di una struct */ struct Vector { public double x; public double y; public double z;

/* dichiarazione di un enum */ enum WindowType { TOPLEVEL, POPUP

Esempi Hello world Con classe GObject: using GLib; public class Test.HelloObject : Object { public static int main(string[] args) { stdout.printf("Hello, World\n"); return 0;

Senza classe GObject: static int main (string[] args) { stdout.printf("Hello, World\n"); return 0; }

Gtk using Gtk;

int main (string[] args) { Gtk.init (ref args);

var window = new Window (); window.title = "First GTK+ Program"; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size (350, 70); window.destroy.connect (Gtk.main_quit);

var button = new Button.with_label ("Click me!"); button.clicked.connect (() => { button.label = "Thank you"; });

window.add (button); window.show_all ();

Gtk.main (); return 0; }

Altri esempi GTK a https://live.gnome.org/Vala/GTKSample.

IDE Ci sono diversi IDE con integrato il supporto per la programmazione in Vala: Geany Val(a)IDE MonoDevelop Vala Toys (plugin per gedit) Valencia (plugin per gedit) Anjuta NetBeans TextMate RedCar Valama GNOME Builder

Note

Voci correlate C (linguaggio) Garbage collection Cronologia dei linguaggi di programmazione Programmazione orientata agli oggetti :Categoria:Software in Vala

Altri progetti

Collegamenti esterni

LibGee, a collection library for vala.

Vala Toys for Gedit, a plugin for Gedit that adds support of autocompletion and more, to program with Vala. Video of Jürg Billeter talking about Vala at the * Gran Canaria Desktop Summit in the summer of 2009. Genie is a Vala dialect with a python-like syntax

Categoria:Linguaggi di programmazione orientati agli oggetti Categoria:Linguaggi di programmazione strutturati Categoria:Linguaggi di programmazione imperativi Categoria:GNOME