[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtk-devel
Subject:    Re: GIO API review
From:       Mikael Hallendal <micke () imendio ! com>
Date:       2007-12-13 18:19:56
Message-ID: 891A6E8E-B71D-47A6-9476-BCF52C0E0D71 () imendio ! com
[Download RAW message or body]

13 dec 2007 kl. 12.51 skrev Alexander Larsson:

Hi,

> On Wed, 2007-12-12 at 16:48 +0100, Mikael Hallendal wrote:
>> 12 dec 2007 kl. 14.59 skrev Alexander Larsson:
>>
>> Hi,
>>
>>> On Tue, 2007-12-11 at 17:48 +0100, Michael Natterer wrote:
>>
>>>
>>>> A big issue is that GIO wastes namespaces massively:
>>>>  g_app, GAsync, g_buffered, g_cancellable, g_content, g_data,
>>>>  g_desktop, g_directory, g_drive, g_file, g_filename, g_filter,
>>>>  g_icon, g_input, g_io, g_schedule, g_cancel, g_loadable,
>>>>  g_local, g_memory, g_mount, g_native, g_seekable, g_simple,
>>>>  g_themed, g_unix, g_vfs, g_volume, g_win32, g_push, g_pop
>>>>
>>>> That's clearly too much and can be reduced. While these are not
>>>> strictly "namespaces" (the namespace is g_), they partly clash with
>>>> g_foos and g_bars we already have, or might need in the future. We
>>>> stronlgy suggest to use a common g_io/GIO prefix for all
>>>> functions/types in GIO.
>>>>
>>>> GAsnc*        -> GIOAsync*
>>>> G*Stream      -> GIOStream*
>>>> GIcon         -> GIOIcon
>>>> G*Icon        -> GIOIcon*
>>>> GCancellable  -> GIOCancellable
>>>> ...
>>>
>>> I strongly oppose this.
>>>
>>> While gio is a separate library these are all symbols in the glib
>>> module, and while it might be a problem at times we can handle any
>>> conflict issues (since we control both libs and release them
>>> toghether).
>>> So, I don't think the problem with this is that bad. I mean, gobject
>>> doesn't call its symbols GObjectClosure, g_object_signal,
>>> GObjectValue,
>>> etc, and this has not been a problem.
>>
>> The big issue is that GIO wastes a lot (31) of namespaces for no
>> purpose. While some might not make sense to put under the GIO
>> namespace (GIOIcon might be one of these, I don't know), the main
>> chunk of them do.
>
> The 31 number is a bit high, as a bunch of the listed things are
> internal only and some we could remove (as discussed in this thread,
> which is a good thing). Furthermore I don't think that e.g. having a
> GSimpleAsyncResult class grabs the whole g_simple namespace.
>
> However, it is true that there parts of the g_ namespace that are
> consumed by gio. However, that is true for any addition to glib or
> gobject too and yet we add names there. Also, even if we used a g_io_
> prefix we should avoid name conflicts anyway. It would be very
> problematic if we had both g_icon and g_io_icon types for instance.

GIcon is probably one of the examples where it makes sense to not have  
it under the GIO namespace.

I just wanted to clarify though that it's not so much for technical  
reasons I suggested that we namespace a bit more carefully.

For example, if we plan to never use the GAsync infrastructure for  
anything other than GIO there is a point to put it under the GIO  
namespace as it shows where it belongs and what part of GLib it is  
used for. It also means we can have GFooAsync later without the two  
getting confused with each other. The same for GCancellable and  
similar namespaces.

Without any namespace other than g_ it gives the idea that these  
"frameworks" are used for more than one subsystem (at least to me).

I don't think the "shorter name" argument is all that valid given that  
g_io_ is a very short namespace either. If that is the only reason I  
think we should change.

Also keep in mind, I'm not suggestion that *everything* should go in  
under g_io_, they would have to be weighted on their own merits and  
GIcon which is often used as an example might be one that doesn't make  
sense and have use cases outside of GIO.

GFile, GDrive, GVolume, GVfs are examples of namespaces that (without  
looking closer) strikes me as valid ones without the GIO. The  
namespaces themselves suggest that they have to do with the IO layer.

GAsync, GCancellable, g_push, g_pop, g_loadable, g_simple are examples  
of namespaces that would benefit from being under the GIO name spaced  
as they are too generic by themselves.

Best Regards,
   Mikael Hallendal

-- 
Imendio AB, http://www.imendio.com



_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic