| <refentry id="glib-changes" revision="17 Jan 2002"> |
| <refmeta> |
| <refentrytitle>Changes to GLib</refentrytitle> |
| <manvolnum>3</manvolnum> |
| <refmiscinfo>Changes to GLib</refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>Changes to GLib</refname> |
| <refpurpose> |
| Incompatible changes made between successing versions of GLib |
| </refpurpose> |
| </refnamediv> |
| |
| |
| <refsect1> |
| <title>Incompatible changes from 2.0 to 2.2</title> |
| |
| <itemizedlist> |
| |
| <listitem> |
| <para> |
| GLib changed the seeding algorithm for the pseudo-random number |
| generator Mersenne Twister, as used by <structname>GRand</structname> |
| and <structname>GRandom</structname>. This was necessary, because some |
| seeds would yield very bad pseudo-random streams. Also the |
| pseudo-random integers generated by |
| <function>g_rand*_int_range()</function> will have a |
| slightly better equal distribution with the new version of GLib. |
| </para> |
| |
| <para> |
| Further information can be found at the website of the Mersenne |
| Twister random number generator at <ulink |
| url="http://www.math.keio.ac.jp/~matumoto/emt.html">http://www.math.keio.ac.jp/~matumoto/emt.html</ulink>. |
| </para> |
| |
| <para> |
| The original seeding and generation algorithms, as found in GLib |
| 2.0.x, can be used instead of the new ones by setting the environment |
| variable <envar>G_RANDOM_VERSION</envar> to the value of '2.0'. Use |
| the GLib-2.0 algorithms only if you have sequences of numbers generated |
| with Glib-2.0 that you need to reproduce exactly. |
| </para> |
| |
| </listitem> |
| |
| </itemizedlist> |
| |
| </refsect1> |
| |
| <refsect1> |
| <title>Incompatible changes from 1.2 to 2.0</title> |
| |
| <para> |
| The <ulink url="http://developer.gnome.org/dotplan/porting/">GNOME 2.0 |
| porting guide</ulink> on <ulink |
| url="http://developer.gnome.org">http://developer.gnome.org</ulink> |
| has some more detailed discussion of porting from 1.2 to 2.0. |
| See the section on GLib. |
| </para> |
| |
| <itemizedlist> |
| |
| <listitem> |
| <para> |
| The event loop functionality <structname>GMain</structname> has extensively |
| been revised to support multiple separate main loops in separate threads. |
| All sources (timeouts, idle functions, etc.) are associated with a |
| <structname>GMainContext</structname>. |
| </para> |
| |
| <para> |
| Compatibility functions exist so that most application code dealing with |
| the main loop will continue to work. However, code that creates new custom |
| types of sources will require modification. |
| </para> |
| |
| <para> |
| The main changes here are: |
| |
| <itemizedlist> |
| |
| <listitem> |
| <para> |
| Sources are now exposed as <type>GSource *</type>, rather than simply as |
| numeric ids. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| New types of sources are created by structure "derivation" from |
| <structname>GSource</structname>, so the <literal>source_data</literal> |
| parameter to the <structname>GSource</structname> virtual functions has been |
| replaced with a <type>GSource *</type>. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| Sources are first created, then later added to a specific |
| <structname>GMainContext</structname>. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| Dispatching has been modified so both the callback and data are passed |
| in to the <function>dispatch()</function> virtual function. |
| </para> |
| </listitem> |
| |
| </itemizedlist> |
| To go along with this change, the vtable for |
| <structname>GIOChannel</structname> has changed and |
| <function>add_watch()</function> has been replaced by |
| <function>create_watch()</function>. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| <function>g_list_foreach()</function> and |
| <function>g_slist_foreach()</function> have been changed so they |
| are now safe against removal of the current item, not the next item. |
| </para> |
| |
| <para> |
| It's not recommended to mutate the list in the callback to these |
| functions in any case. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| <structname>GDate</structname> now works in UTF-8, not in the current locale. |
| If you want to use it with the encoding of the locale, you need to convert |
| strings using <function>g_locale_to_utf8()</function> first. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| <function>g_strsplit()</function> has been fixed to: |
| |
| <itemizedlist> |
| <listitem> |
| <para> |
| include trailing empty tokens, rather than stripping them |
| </para> |
| </listitem> |
| <listitem> |
| <para> |
| split into a maximum of <literal>max_tokens</literal> tokens, rather |
| than <literal>max_tokens + 1</literal> |
| </para> |
| </listitem> |
| </itemizedlist> |
| |
| Code depending on either of these bugs will need to be fixed. |
| </para> |
| </listitem> |
| |
| <listitem> |
| <para> |
| Deprecated functions that got removed: |
| <function>g_set_error_handler()</function>, |
| <function>g_set_warning_handler()</function>, |
| <function>g_set_message_handler()</function>, use |
| <function>g_log_set_handler()</function> instead. |
| </para> |
| </listitem> |
| </itemizedlist> |
| |
| </refsect1> |
| |
| </refentry> |