La nouvelle version du compilateur Vala, 0.7.6, vient d'être annoncée :
Les plus grosses nouveautés étant les closures et les méthodes asynchrones.Changes since 0.7.5
* Add support for closures.
* Improve support for asynchronous methods.
* Support async methods in D-Bus servers.
* Add clutter-1.0 bindings (Rob Taylor).
* Add GVariant, GSettings, and dconf bindings (Ryan Lortie).
* Add linux, libnl-1, and libasound bindings (Michael 'Mickey' Lauer).
* Add gnutls bindings (Jiří Zárevúcky).
* Add librest bindings (Adrien Bustany).
* Many bug fixes and binding updates.
Pour les closures, il existait déjà les fonctions anonymes, mais il était impossible d'accéder aux variables locales de la fonction dans laquelle elle était définie.
Par exemple :
Code vala : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void main (string[] args) { Gtk.init (ref args); var window = new Gtk.Window (Gtk.WindowType.TOPLEVEL); window.set_default_size (300, 50); window.destroy.connect (Gtk.main_quit); var button = new Gtk.Button.with_label ("Click me!"); button.clicked.connect (() => { window.title = "Closures in Vala"; }); window.add (button); window.show_all (); Gtk.main (); }
Concernant les méthodes asynchrones, il s'agit de l'aboutissement des expressions "yield" introduit dans vala 0.5.1
Code vala : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 async void list_dir () { var dir = File.new_for_path (Environment.get_home_dir ()); try { var e = yield dir.enumerate_children_async (FILE_ATTRIBUTE_STANDARD_NAME, 0, Priority.DEFAULT, null); while (true) { var files = yield e.next_files_async (10, Priority.DEFAULT, null); if (files == null) { break; } foreach (var info in files) { print ("%s\n", info.get_name ()); } } } catch (GLib.Error err) { warning ("Error: %s\n", err.message); } } void main () { list_dir.begin (); var loop = new GLib.MainLoop (null, false); loop.run(); }
Exemples tirés du blog de Jürg Billeter
Partager