Re: Possible to fix glaring Gjs API issues before GNOME 4?



Von: "Martin Pitt" <martin pitt ubuntu com>:
1. Some functions return useless "success" boolean: for example
[success, contents, etag_out] = GFile.load_contents(). When C
g_file_load_contents returns false, it also sets GError, so in Gjs it's
either true or the function has thrown exception.

Note that many other functions with that style don't throw a GError.
In PyGObject we have overrides for many of them to filter out the bool
and only return the (out) arguments if the return value is True. Look
for "strip_boolean_result" in
http://git.gnome.org/browse/pygobject/tree/gi/overrides/Gtk.py

We use a similar approach in the Perl bindings: 
<http://git.gnome.org/browse/perl-Glib-Object-Introspection/tree/lib/Glib/Object/Introspection.pm#n48>, 
<http://git.gnome.org/browse/perl-Gtk3/tree/lib/Gtk3.pm#n49>.

When functions with a "success" boolean and out arguments don't throw an exception, you can still get rid of 
the boolean if your language supports a variable number of return values.  You simply return nothing then in 
the case the boolean is false.

But note that you cannot use a heuristic like "has boolean return value and out arguments" to decide whether 
to apply this approach: gtk_tree_selection_get_selected is a counter example, 
<http://developer.gnome.org/gtk3/3.2/GtkTreeSelection.html#gtk-tree-selection-get-selected>.

I also think an annotation for boolean return values that states "this is a sentinel for whether the out args 
have been set" would be useful.  It would make it possible for bindings to share this information.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]