• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<refentry id="glib-changes" revision="17 Jan 2002">
2<refmeta>
3<refentrytitle>Changes to GLib</refentrytitle>
4<manvolnum>3</manvolnum>
5<refmiscinfo>Changes to GLib</refmiscinfo>
6</refmeta>
7
8<refnamediv>
9<refname>Changes to GLib</refname>
10<refpurpose>
11Incompatible changes made between successing versions of GLib
12</refpurpose>
13</refnamediv>
14
15
16<refsect1>
17<title>Incompatible changes from 2.0 to 2.2</title>
18
19<itemizedlist>
20
21<listitem>
22<para>
23GLib changed the seeding algorithm for the pseudo-random number
24generator Mersenne Twister, as used by <structname>GRand</structname>
25and <structname>GRandom</structname>. This was necessary, because some
26seeds would yield very bad pseudo-random streams. Also the
27pseudo-random integers generated by
28<function>g_rand*_int_range()</function> will have a
29slightly better equal distribution with the new version of GLib.
30</para>
31
32<para>
33Further information can be found at the website of the Mersenne
34Twister random number generator at <ulink
35url="http://www.math.keio.ac.jp/~matumoto/emt.html">http://www.math.keio.ac.jp/~matumoto/emt.html</ulink>.
36</para>
37
38<para>
39The original seeding and generation algorithms, as found in GLib
402.0.x, can be used instead of the new ones by setting the environment
41variable <envar>G_RANDOM_VERSION</envar> to the value of '2.0'. Use
42the GLib-2.0 algorithms only if you have sequences of numbers generated
43with Glib-2.0 that you need to reproduce exactly.
44</para>
45
46</listitem>
47
48</itemizedlist>
49
50</refsect1>
51
52<refsect1>
53<title>Incompatible changes from 1.2 to 2.0</title>
54
55<para>
56The <ulink url="http://developer.gnome.org/dotplan/porting/">GNOME 2.0
57porting guide</ulink> on <ulink
58url="http://developer.gnome.org">http://developer.gnome.org</ulink>
59has some more detailed discussion of porting from 1.2 to 2.0.
60See the section on GLib.
61</para>
62
63<itemizedlist>
64
65<listitem>
66<para>
67The event loop functionality <structname>GMain</structname> has extensively
68been revised to support multiple separate main loops in separate threads.
69All sources (timeouts, idle functions, etc.) are associated with a
70<structname>GMainContext</structname>.
71</para>
72
73<para>
74Compatibility functions exist so that most application code dealing with
75the main loop will continue to work. However, code that creates new custom
76types of sources will require modification.
77</para>
78
79<para>
80The main changes here are:
81
82  <itemizedlist>
83
84  <listitem>
85  <para>
86   Sources are now exposed as <type>GSource *</type>, rather than simply as
87   numeric ids.
88  </para>
89  </listitem>
90
91  <listitem>
92  <para>
93   New types of sources are created by structure "derivation" from
94   <structname>GSource</structname>, so the <literal>source_data</literal>
95   parameter to the <structname>GSource</structname> virtual functions has been
96   replaced with a <type>GSource *</type>.
97  </para>
98  </listitem>
99
100  <listitem>
101  <para>
102   Sources are first created, then later added to a specific
103   <structname>GMainContext</structname>.
104  </para>
105  </listitem>
106
107  <listitem>
108  <para>
109   Dispatching has been modified so both the callback and data are passed
110   in to the <function>dispatch()</function> virtual function.
111  </para>
112  </listitem>
113
114  </itemizedlist>
115  To go along with this change, the vtable for
116  <structname>GIOChannel</structname> has changed and
117  <function>add_watch()</function> has been replaced by
118  <function>create_watch()</function>.
119</para>
120</listitem>
121
122<listitem>
123<para>
124<function>g_list_foreach()</function> and
125<function>g_slist_foreach()</function> have been changed so they
126are now safe against removal of the current item, not the next item.
127</para>
128
129<para>
130It's not recommended to mutate the list in the callback to these
131functions in any case.
132</para>
133</listitem>
134
135<listitem>
136<para>
137<structname>GDate</structname> now works in UTF-8, not in the current locale.
138If you want to use it with the encoding of the locale, you need to convert
139strings using <function>g_locale_to_utf8()</function> first.
140</para>
141</listitem>
142
143<listitem>
144<para>
145<function>g_strsplit()</function> has been fixed to:
146
147  <itemizedlist>
148  <listitem>
149  <para>
150   include trailing empty tokens, rather than stripping them
151  </para>
152  </listitem>
153  <listitem>
154  <para>
155   split into a maximum of <literal>max_tokens</literal> tokens, rather
156   than <literal>max_tokens + 1</literal>
157  </para>
158  </listitem>
159  </itemizedlist>
160
161  Code depending on either of these bugs will need to be fixed.
162</para>
163</listitem>
164
165<listitem>
166<para>
167Deprecated functions that got removed:
168<function>g_set_error_handler()</function>,
169<function>g_set_warning_handler()</function>,
170<function>g_set_message_handler()</function>, use
171<function>g_log_set_handler()</function> instead.
172</para>
173</listitem>
174</itemizedlist>
175
176</refsect1>
177
178</refentry>
179