Re: G_TYPE_<unterminated-string> (was: Re: Status of 2.0 API freeze bugs)
- From: Owen Taylor <otaylor redhat com>
- To: Tim Janik <timj gtk org>
- Cc: Gtk+ Developers <gtk-devel-list gnome org>
- Subject: Re: G_TYPE_<unterminated-string> (was: Re: Status of 2.0 API freeze bugs)
- Date: 08 May 2001 13:45:00 -0400
Tim Janik <timj gtk org> writes:
> On 8 May 2001, Owen Taylor wrote:
>
> > So, let's go back in history to August 1997, to about the time that Peter
> > turned over GTK+ maintenance:
> >
> > widgets, n_widgets: ~18 functions
> >
> > gdk_query_depths, gdk_query_visual_types, gdk_query_visuals, gdk_colors_alloc,
> > gdk_colors_free, gdk_colors_change, gdk_draw_polygon, gdk_draw_points,
> > gdk_selection_set, gdk_property_change, g_array_append_values,
> > g_rarray_append, gtk_menu_factory_add_entries, gdk_menu_factory_remove_paths,
> > gdk_menu_factory_remove_entries, gtk_object_class_add_signals
> >
> > n_widgets, widgets: ~6 functions
> >
> > gtk_curve_set_vector, gtk_curve_get_vector, gtk_object_newv, gtk_object_setv,
> > gtk_widget_newv, gtk_object_getv.
> >
> > So, basically, the newv functions had one ordering, everything else had another
> > ordering.
>
> fine, as we discovered on our irc meeting already, peter probably wasn't too
> consistent about this either (though not all of the above are actually his
> APIs).
Everything but gtk_curve and g_array, I believe. Like 16/4 better? ;-)
> anyways, apart from intuitiveness and order of significance where we obviously
> seem to disagree, the one reason why i certainly won't accept (bytes, n_bytes)
> ordering for the varargs case is that in a prototype with elipsis, e.g.
>
> gpointer g_object_set (gpointer object,
> const gchar *first_property_name,
> ...);
>
> the compiler won't catch it if you make the wrong choice as a user (which _will_
> happen because we're inconsistent in other places already).
OK, so consistency is good.
> so since the compiler can't help the user here, the only aid i can give to
> him is consistency for the varargs APIs. now you can say "ok then lets always
> use (elements,n_elements) ordering for varargs interfaces and be done", but that
> doesn't account for e.g. lists. say i introduce a string list type, that would
> have to be collected as (n_strings, string1, string2, string3, ...) and with
> using (bytes,n_bytes) ordering for we'd get inconsistent in the varargs interface.
Do we have such a thing? I don't think so...
Are you about to introduce such a thing?
And would users really consider this the same as an array argument?
> putting examples, i don't want to confuse the user with:
>
> g_object_set (object,
> "list_property", n_items, item1, item2, item3,
> "byte_property", bytes, n_bytes,
> NULL);
>
> but want him to be able to always pick the right order simply by knowing
> that for varargs we consistenly pick (n_elements, elements...), that is:
>
> g_object_set (object,
> "list_property", n_items, item1, item2, item3,
> "byte_property", n_bytes, bytes,
> NULL);
>
> especially because we're talking a type-unsafe interface here, consistency
> is the only thing that can keep users from having to find out and remember
> individual orders by coding-running-segfaulting.
Even if you consider the above to be parellel, since the
"list_property" does not exist now, and we do have dozens, perhaps
hundreds, of functions like:
void
gtk_editable_insert_text (GtkEditable *editable,
const gchar *new_text,
gint new_text_length,
gint *position);
And like:
char *strncpy (char *dest, const char *src, size_t n);
I would guess the more likely thing for people to do is to write:
g_object_set (object,
"byte_property", bytes, n_bytes,
NULL);
Maybe I'm off in la-la land here, but I really don't think so...
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]