ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/Changes
Revision: 1.221
Committed: Sat Mar 8 15:51:23 2014 UTC (10 years, 2 months ago) by root
Branch: MAIN
CVS Tags: EV_rel-4_17, EV_rel-4_16
Changes since 1.220: +9 -0 lines
Log Message:
4.16

File Contents

# User Rev Content
1 root 1.143 Revision history for Perl extension EV
2 root 1.1
3 root 1.185 Changes marked with (libev) are changes in libev, and have more
4     documentation in the libev Changes file.
5    
6 root 1.219 TODO: better multiarch detection
7    
8 root 1.221 4.16 Sat Mar 8 16:49:05 CET 2014
9 root 1.216 - make sure EV::CHECK is available at all times.
10     - avoid a spurious warning when perl -w overrides "no warnings".
11 root 1.219 - use perl's signal implementation on WIN32.
12 root 1.220 - ensure extern "C" function pointers are used for externally-visible
13 root 1.221 pointers.
14     - (libev) mark event pipe fd as cloexec after a fork (analyzed by Sami Farin).
15     - (ecb) support m68k, m88k and sh (patch by Miod Vallat).
16     - (libev) in the absence of autoconf, do not use the clock syscall
17     on glibc >= 2.17 (avoids the syscall AND -lrt on systems
18     doing clock_gettime in userspace).
19     - (ecb) work around memory barriers and volatile apparently both being
20     broken in visual studio 2008 and later (analysed and patch by Nicolas Noble).
21 root 1.216
22 root 1.215 4.15 Fri Mar 1 12:15:53 CET 2013
23     - (libev) upgrade to 4.15 - too many changes to list.
24 root 1.214 - EV::run now returns a boolean.
25 root 1.211 - API version 5:1.
26 root 1.214 - document that cleanup watchers are not available via perl.
27 root 1.212 - cast I32 to int in error message printf.
28 root 1.214 - remove dependencies on librt and libpthreads on GNU/Linux.
29 root 1.211
30 root 1.210 4.11 Sat Feb 4 19:56:26 CET 2012
31     - (libev) implement memory fences for (obsolete) llvm-gcc.
32    
33 root 1.209 4.10 Thu Jan 19 18:54:23 CET 2012
34     - (libev) fix a race where the workaround against the epoll fork
35     bugs caused signals to not be handled anymore.
36     - (libev) correct backend_fudge for most backends, and implement
37     a windows specific workaround to avoid looping because we call
38     both select and Sleep, both with different time resolutions.
39 root 1.207 - e_new wasn't declared static (causing very minor .so bloat).
40 root 1.208 - replace more old api names by new ones.
41 root 1.206
42 root 1.205 4.03 Tue Jan 11 14:51:05 CET 2011
43 root 1.203 - do not avoid the clock_gettime call on GNU/Linux anymore, as EV
44     links against -lpthread anyways - as a result, EV might now take
45     advantage of fast userspace clock_gettime implementations,
46     but also links against -lrt.
47 root 1.204 - (libev) lots of event port bug workarounds.
48     - (libev) officially support files in I/O watchers.
49     - (libev) new function ev_feed_signal.
50     - fix documentation parts still refering to the 3.x API.
51 root 1.203
52 root 1.202 4.02 Thu Dec 30 08:27:41 CET 2010
53     - the revents argument did not stringify correctly, as only the
54     numeric value was updated, while the string value was kept from
55     previous invocations.
56    
57 root 1.201 4.01 Sun Dec 5 12:42:13 CET 2010
58 root 1.197 - fully support EV_COMPAT3=0.
59 root 1.198 - default_fork was stupidly defined as inline.
60 root 1.199 - ask cpan to upgrade AnyEvent if < 5.29.
61 root 1.200 - support EV_EXTRA_DEFS during configuration.
62 root 1.201 - support -DEV_NO_LOOPS for snakker build.
63 root 1.197
64 root 1.196 4.00 Mon Oct 25 13:30:09 CEST 2010
65 root 1.194 - many API changes, see the manual.
66 root 1.196 - (libev) lots and lots of bugfixes, see the ev documentation.
67 root 1.187 - fix a bug where inotify usage would parse the same event
68     multiple times, causing various forms of breakage.
69     - greatly reduce stack usage for inotify (8kb to <0.5kb).
70 root 1.189 - expose ev_depth and ev_verify via the XS API.
71 root 1.196 - implement ev_cleanup watchers.
72 root 1.188 - (libev) ev_embed_stop did not correctly stop the watcher.
73     - (libev) disable poll backend on AIX.
74     - (libev) rename EV_TIMEOUT to EV_TIMER.
75     - (libev) add section on accept() problems to the manpage.
76 root 1.191 - (libev) no child watchers on win32.
77 root 1.190 - make code more aliasing compliant, in case perl is ever
78     translated to C.
79 root 1.193 - document the EV::CHECK runtime unavailability.
80 root 1.192 - ported to minix 3.1.7.
81 root 1.187
82 root 1.186 3.9 Thu Dec 31 07:59:59 CET 2009
83 root 1.182 - disable t/07* under automatic testing.
84 root 1.183 - increase t/09* timeouts as netbsd has *horribly* broken
85     select/kevent that *usually* sleep >>0.6s instead of 0.3.
86 root 1.184 - add constants EV::FLAG_NOSIGFD, EV::FLAG_NOINOTIFY and
87     EV::BACKEND_ALL.
88 root 1.185 - (libev) signalfd is no longer used by default.
89     - (libev) backport inotify code to C89.
90     - (libev) inotify file descriptors could leak into child processes.
91     - (libev) ev_stat watchers could keep an errornous extra ref on the loop.
92     - (libev) take advantage of inotify_init1, if available.
93     - (libev) the signal handling pipe wasn't always initialised under windows.
94     - changed minimum glibc requirement from glibc 2.9 to 2.7, for signalfd.
95     - (libev) only replace ev_stat.prev when we detect an actual difference.
96 root 1.182
97 root 1.181 3.8 Sun Aug 9 15:30:10 CEST 2009
98 root 1.180 - implement $loop->signal/signal_ns.
99 root 1.181 - (libev) incompatible change: do not necessarily reset signal
100     handler to SIG_DFL when a sighandler is stopped.
101     - (libev) ev_default_destroy did not properly free or zero some
102     members, potentially causing crashes and memory corruption on
103     repated ev_default_destroy/ev_default_loop calls.
104     - (libev) take advantage of signalfd on GNU/Linux systems.
105     - (libev) document that the signal mask might be in an unspecified
106     state when using libev's signal handling.
107     - (libev) take advantage of some GNU/Linux calls to set
108     cloexec/nonblock on fd creation, to avoid race conditions.
109     - implement internal glue code to interface more efficiently
110     with AnyEvent.
111 root 1.180
112 root 1.177 3.7 Fri Jul 17 16:49:16 CEST 2009
113 root 1.171 - add EV::loop_verify and EV::loop_depth.
114 root 1.172 - use output filehandle for i/o watchers waiting
115     for EV_WRITE, otherwise input filehandle.
116     - use common schmorp.h header.
117 root 1.176 - add EV::Timer->remaining.
118 root 1.175 - allow for subclassing of EV::Loop (see the exciting
119     EV::Loop::Async module for an example).
120     - added EV::invoke_pending and EV::pending_count.
121 root 1.171
122 root 1.177 - (libev) ev_unloop and ev_loop wrongly used a global variable to
123     exit loops, instead of using a per-loop variable.
124     - (libev) the ev_set_io_collect_interval interpretation has changed.
125     - add new functionality: EV::invoke_pending, EV::pending_count.
126     - add $timer->remaining.
127     - add EV::loop_depth.
128     - (libev) calling unloop in fork/prepare watchers will no longer poll
129     for new events.
130     - (libev) use GetSystemTimeAsFileTime instead of _timeb on windows,
131     for slightly higher accuracy.
132     - (libev) actually 0-initialise struct sigaction when installing
133     signals.
134    
135 root 1.170 3.6 Tue Apr 28 02:50:37 CEST 2009
136 root 1.167 - keepalive(0) could decrease the refcount of the loop
137     permanently.
138 root 1.168 - add ev_suspend/ev_resume, also make ev_now_update
139     accessible via the XS API.
140 root 1.169 - most EV::<eventtype> constants were missing and have been
141     added :/.
142     - add EV::VERSION_MAJOR/VERSION_MINOR constants.
143     - (libev) multiple timers becoming ready within an event loop
144     iteration will be invoked in the "correct" order now.
145     - (libev) do not leave the event loop early just because we have
146     no active watchers, fixing a problem when embedding a kqueue
147     loop that has active kernel events but no registered watchers
148     (reported by blacksand blacksand).
149     - (libev) correctly zero the idx values for arrays, so destroying
150     and reinitialising the default loop actually works (patch by
151     Malek Hadj-Ali).
152     - (libev) new EV::CUSTOM revents flag for use by applications.
153     - (libev) add documentation section about priorites.
154     - (libev) add a glossary to the dcoumentation.
155     - (libev) extend the ev_fork description slightly.
156     - (libev) optimize a jump out of call_pending.
157     - t/03_keepalive could fail when there was no actual error.
158 root 1.167
159 root 1.166 3.53 Sun Feb 15 02:38:20 CET 2009
160     - (libev) on win32, the event loop creation could randomly fail
161     due to an initialised variable having the wrong value.
162 root 1.165 - (libev) probe for CLOCK_REALTIME support at runtime as well and
163     fall back to gettimeofday if there is an error, to support older
164     operating systems with newer header files/libraries.
165     - prefer gettimeofday over clock_gettime by default.
166    
167 root 1.164 3.52 Wed Jan 7 21:46:14 CET 2009
168 root 1.163 - (libev) fix some issues in the select backend when in fd_set mode.
169     - (libev) due to a thinko, instead of disabling everything but
170     select on the borked OS X platform, everything but select was
171     allowed (reported by Emanuele Giaquinta).
172     - (libev) actually verify that local and remote port are matching in
173     libev's socketpair emulation, which makes denial-of-service
174     attacks harder (but not impossible - it's windows). Make sure
175     it even works under vista, which thinks that getpeer/sockname
176     should return fantasy port numbers.
177    
178 root 1.162 3.51 Wed Dec 24 23:01:59 CET 2008
179 root 1.161 - do not cache the arguments passed to callbacks if the refcount
180     indicates that the callback has stolen them.
181 root 1.159 - (libev) try to avoid librt on GNU/Linux.
182 root 1.160 - (libev) check port_getn return value dfferently, might potentially
183     avoid problems.
184 root 1.162 - (libev) fix a bug with stat watchers possibly causing freezes.
185     - (libev) work around OS X 10.5 breaking poll, now select is the
186     only viable choice left on that pile of garbage.
187 root 1.161 - play tester whore: disable some tests that typically fail only
188     on cpan tester machines.
189 root 1.159
190 root 1.158 3.49 Wed Nov 19 11:26:53 CET 2008
191 root 1.155 - fix typos in manpage (Alex Efros).
192 root 1.156 - increase timing even further, for the ever-overloaded cpan-tester
193     machines, and to the detriment of everybody else who wants a fast
194     make test.
195 root 1.157 - possible 5.6 compatibility.
196 root 1.158 - (libev) use inotify even on buggy kernels, but don't rely on it.
197     - (libev) use inotify only as an added hint on network filesystems.
198 root 1.155
199 root 1.154 3.48 Thu Oct 30 09:09:48 CET 2008
200 root 1.152 - (libev) use a generation counter to detect spurious epoll events
201 root 1.151 and recreate the kernel in such a case (sorry, it's slow, but
202     I didn't design epoll...).
203 root 1.150 - (libev) optimise away an EPOLL_CTL_ADD/MOD combo in the epoll
204     backend in some cases.
205     - (libev) use memset to initialise most arrays now and do away
206     with the init functions.
207 root 1.152 - speed up event callback invocation further (~15%), by
208 root 1.151 not creating the object reference each time.
209 root 1.153 - EV::sleep was documented, but not implemented. fun.
210 root 1.150
211     3.45 Tue Oct 21 22:20:39 CEST 2008
212     - (libev) disable inotify usage on linux <2.6.25 (kernel bug).
213 root 1.146 - (libev) ev_embed will now automatically follow fork.
214     - (libev) ev_once will now pass both io and timeout events to
215     the callback when both happen concurrently, instead of giving
216     one precedence.
217 root 1.149 - install C library documentation as EV::libev manpage (sorry, oesi).
218 root 1.150 - (libev) fix a minor performance bug in ev_stat handling.
219 root 1.146
220 root 1.145 3.44 Mon Sep 29 05:16:31 CEST 2008
221 root 1.144 - (libev) add EV::now_update and $loop->now_update.
222    
223 root 1.142 3.431 Sun Jul 13 00:19:02 CEST 2008
224     - made the EV::embed callback optional again. reported by
225     Vladimir Timofeev.
226    
227 root 1.141 3.43 Tue Jul 8 20:56:31 CEST 2008
228 root 1.140 - disabled warnings in EV.pm, the CHECK issue is now understood
229     and harmless.
230    
231 root 1.139 3.42 Mon May 26 07:36:46 CEST 2008
232 root 1.138 - (libev) work around another bug in windows perls and
233     windows itself: failed connects do NOT set read or write
234     flags in select, but this version of libev will.
235    
236 root 1.136 3.41 Thu May 22 01:39:40 CEST 2008
237 root 1.135 - (libev) fix many heap-related bugs (timers, periodics).
238 root 1.134 - (libev) improve timing stability of timers and periodics.
239 root 1.137 - expose ev_loop_verify to perl code.
240 root 1.134 - clarify documentation for periodic reschedule callbacks.
241     - verify that the passed callback argument is indeed a code
242     reference, for earlier error reporting and a nice calling
243     speed increase (as well as saving memory).
244    
245 root 1.133 3.4 Tue May 20 21:51:55 CEST 2008
246 root 1.132 - (libev) work around both a windows bug and a bug in perl's
247     select on windows when not waiting for any file descriptors.
248 root 1.131 - bundle ev.pod into the tarball, just to increase its size
249     (and for the poor internetless person).
250    
251 root 1.130 3.33 Sun May 18 12:43:04 CEST 2008
252     - (libev) use numerous enhancements such as a more
253     cache-friendly 4-heap and heap index caching for timers.
254     - remove undocumented ev_timer->at accessor.
255    
256 root 1.129 3.31 Wed Apr 16 20:48:59 CEST 2008
257     - (libev) post-last-minute fix for ev_poll.c problem.
258    
259 root 1.128 3.3 Wed Apr 16 19:04:47 CEST 2008
260 root 1.125 - (libev) linux eventfd support.
261 root 1.128 - (libev) inline more with C99 compilers.
262     - (libev) work around a number of bugs in valgrind.
263     - (libev) work around broken realloc on openbsd and darwin.
264 root 1.126 - added example to EV::MakeMaker manpage.
265 root 1.127 - add async_pending method.
266 root 1.125
267 root 1.123 3.2 Wed Apr 2 17:08:16 CEST 2008
268 root 1.117 - "ported" again to the Microsoft "C" language.
269 root 1.124 - relax testsuite timing for the benefit of freebsd users once more.
270 root 1.121 - fix EVAPI's ev_time and ev_sleep macros.
271 root 1.120 - (libev) fix select backend on 64 bit architetcures.
272 root 1.122 - (libev) ev_loop flags are now local to each invocation.
273 root 1.117
274 root 1.116 3.1 Sat Mar 8 11:41:14 CET 2008
275 root 1.113 - add ev_sync_* and ev_fork_* to EVAPI.h.
276 root 1.115 - provide EV::Embed->sweep method.
277     - new watcher type: async (not very useful in perl).
278 root 1.113
279 root 1.112 3.0 Mon Jan 28 13:23:11 CET 2008
280     - upgrade to libev-3.0.
281 root 1.111 - change child handler to incorporate tracing flag.
282    
283 root 1.110 2.01 Mon Dec 31 01:59:19 CET 2007
284     - found a minor problem in the testsuite that is only
285     caught by new Test::Harness versions (reported by Andreas
286     König).
287    
288 root 1.107 2.0 Sat Dec 22 17:47:03 CET 2007
289 root 1.100 - no longer force kqueue when enabled, enable it
290     on more systems (as its now by default not used on most).
291 root 1.95 - expose fork watchers.
292     - switch to libev's MULTIPLICITY API.
293 root 1.96 - use a slightly different include file name strategy.
294     - get rid of (unused) libevent emulation.
295 root 1.97 - 5% watcher management speedup due to callback optimisation
296     when inline closures are used, 5% slowdown due to multiplicity.
297 root 1.98 - very minimal support for dynamic event loops and embed watchers.
298 root 1.103 - fix name of prepare start/stop methods.
299 root 1.105 - create and export EV::sleep and EV::set_*_collect_interval.
300 root 1.106 - fix typos in manpage (Alex Efros).
301 root 1.95
302 root 1.94 1.86 Tue Dec 18 02:36:57 CET 2007
303 root 1.93 - add periodic->at methods.
304 root 1.92
305 root 1.91 1.85 Fri Dec 14 20:32:40 CET 2007
306 root 1.90 - further optimise epoll backend by adding a heuristic that
307     avoids EPOLL_CTL_DEL calls if possible.
308 root 1.87 - EV::signal->start was not async-signal safe.
309 root 1.89 - optimise start/stop when the fd hasn't changed.
310 root 1.87
311 root 1.86 1.8 Tue Dec 11 22:17:46 CET 2007
312 root 1.83 - API version 3:0.
313 root 1.81 - reduced fudge factor to zero for select, poll, epoll
314     and kqueue: your system better be posix-compliant
315     even in its extensions :->
316 root 1.82 - improve long-term numerical stability in periodic watchers
317     by introducing a separate offset value instead of reusing at.
318 root 1.84 - recalculate real/monotonic clocks before blocking fully
319     to avoid blocking for longer than necessary.
320 root 1.85 - fix bugs in the heap functions. this rarely lead to illegal
321     heap orderings.
322 root 1.81
323 root 1.80 1.72 Sat Dec 8 15:31:26 CET 2007
324 root 1.77 - add dummy loop arguments to some EVAPI functions
325     so that clients can use EV_A and EV_DEFAULT.
326 root 1.78 - expose ev_clear_pending.
327 root 1.79 - renamed trigger to invoke.
328 root 1.77
329 root 1.76 1.71 Fri Dec 7 19:10:24 CET 2007
330 root 1.75 - changed/implemented idle watcher priority.
331     - allow out-of-range priorities to be set.
332     - fix ->priority to actually work on started watchers.
333     - improved testsuite.
334    
335 root 1.74 1.6 Wed Dec 5 15:06:20 CET 2007
336 root 1.70 - add a missing SPAGAIN.
337 root 1.71 - ripped out EV::DNS, use EV::ADNS for a better backend.
338     - make ev_time callable from EVAPI.h.
339 root 1.72 - add EV::loop_count.
340 root 1.73 - some space optimisations.
341 root 1.70
342 root 1.69 1.5 Wed Nov 28 20:19:09 CET 2007
343 root 1.67 - add inotify backend.
344 root 1.69 - make testsuite even less sensible to timing issues,
345     add more stat tests.
346 root 1.68 - add ->attr, ->prev, ->stat calls to stat watcher.
347 root 1.67
348 root 1.66 1.4 Tue Nov 27 17:35:27 CET 2007
349 root 1.64 - work around a linux 2.4 kernel bug in child handlers.
350     - implement stat watcher interface.
351 root 1.65 - implement fork watcher interface.
352 root 1.64 - io->set did not keep the fh alive.
353     - actively check signal numbers/names to be valid.
354     - cleanups, minor fixes, new bugs.
355 root 1.66 - work around windows bugs in the testsuite.
356 root 1.64
357 root 1.63 1.3 Sun Nov 25 10:46:57 CET 2007
358     - stopping idle/check/prepare watchers could cause data corruption.
359 root 1.58 - implement and document EV::once.
360 root 1.57 - improved documentation, verify that netbsd indeed has the only
361     working kqueue implementation (out of darwin, freebsd, netbsd and
362     openbsd). Praise them!
363 root 1.62 - fix the data method so it might work.
364 root 1.59 - expose ev_ref/ev_unref to the C API.
365 root 1.61 - expose ref/unref in form of the ->keepalive method to perl.
366 root 1.58 - minor bugfixes and portability fixes.
367 root 1.57
368 root 1.56 1.2 Thu Nov 22 05:44:09 CET 2007
369     - disable kqueue by default on !netbsd, as its broken on freebsd,
370     darwin and openbsd and thus almost everywhere.
371     - add some allowance in t/01_timer.t for the uneven monotonic
372     vs. realtime clock tick on at least freebsd.
373     - add -lsocket -lnsl on solaris in case the perl guy forgot to
374     configure them.
375    
376 root 1.55 1.1 Wed Nov 21 06:08:48 CET 2007
377 root 1.53 - improved timer test to include periodics and
378     withstand small timing variations.
379 root 1.54 - many minor tweaks to libev.
380 root 1.53
381 root 1.52 1.0 Fri Nov 16 14:51:59 CET 2007
382 root 1.50 - require AnyEvent update if AnyEvent is installed.
383 root 1.51 - add solaris 10 port-based backend.
384     - add child_ns and fix check_ns.
385 root 1.52 - treat yes/no as enforcement, not as hint, when configuring,
386     documentation update (reported by Andy Grundman).
387 root 1.50
388 root 1.49 0.9 Wed Nov 14 22:24:49 CET 2007
389 root 1.45 - changed LIBEV_METHODS to LIBEV_FLAGS and the
390     way this is used inside libev.
391 root 1.46 - many, many bugfixes.
392     - add unloop constants.
393 root 1.47 - add timer test.
394 root 1.48 - ev_loop will now terminate immediately when no watchers are active.
395 root 1.45
396 root 1.44 0.8 Mon Nov 12 02:28:46 CET 2007
397 root 1.41 - fix "testsuite" again :().
398     - fix check/idle/prepare/child watcher stop.
399 root 1.42 - enourmously many fixes.
400     - rewritten select backend (mostly for win32).
401     - cache socket handles on win32.
402 root 1.43 - provide considerably finer control over configuration.
403 root 1.41
404 root 1.40 0.7 Fri Nov 9 20:37:58 CET 2007
405 root 1.39 - move AnyEvent adaptor into the AnyEvent module.
406 root 1.41 - use private copy of evdns.[ch].
407 root 1.39 - many minor fixes.
408    
409 root 1.38 0.6 Thu Nov 8 18:23:43 CET 2007
410 root 1.95 - (libev) better native win32 support.
411 root 1.35 - fix idle watchers.
412 root 1.37 - implement and document periodic reschedule callbacks.
413     - do not run dns test on !linux platforms (actually to exclude win32).
414 root 1.38 - fix (unused in EV :) poll backend.
415 root 1.34
416 root 1.33 0.51 Tue Nov 6 19:50:22 CET 2007
417 root 1.32 - fix kqueue/poll compilation issue.
418 root 1.33 - work around design issues in kqueue.
419 root 1.32 - enable kqueue by default, seems to work.
420    
421 root 1.31 0.5 Tue Nov 6 17:37:44 CET 2007
422 root 1.23 - add signal and pid mutators.
423 root 1.27 - add rstatus/rpid accessors.
424 root 1.24 - updated libev (lower cost for clock monotonic).
425 root 1.25 - support event priorities.
426 root 1.26 - try to find SIG_SIZE on perls that don't have it (Slaven Rezic).
427 root 1.28 - improved signal handling, fixed child watchers.
428 root 1.29 - experimentally add kqueue backend, completely untested.
429 root 1.30 - ported to cygwin and native win32.
430 root 1.23
431 root 1.22 0.1 Thu Nov 1 18:29:22 CET 2007
432 root 1.18 - replaced libevent by libev (total rewrite).
433     - many bugfixes w.r.t. libevent.
434     - new watcher types: periodic, check, prepare, child, idle.
435 root 1.16 - performance optimisations.
436 root 1.19 - added interactive configuration.
437 root 1.21 - added fork support.
438 root 1.16
439 root 1.14 0.03 Mon Oct 29 20:52:50 CET 2007
440 root 1.9 - add timed_io convenience constructors.
441     - improve documentation.
442 root 1.8 - support signal names in addition to signal numbers.
443 root 1.9 - support signal anyevent watchers.
444 root 1.10 - vastly improved testsuite (its all relative :).
445 root 1.11 - add EV::MakeMaker, beginning of C-level API.
446 root 1.12 - force strings to byte form.
447 root 1.6
448 root 1.5 0.02 Sun Oct 28 07:40:21 CET 2007
449 root 1.15 - call $EV::DIED in case a callback throws an exception.
450 root 1.4 - add const char * to typemap for possible 5.6 compatibility.
451 root 1.3
452     0.01 Sat Oct 27 19:10:18 CEST 2007
453     - initial release.
454    
455     0.00 Fri Oct 26 11:12:57 CEST 2007
456 root 1.1 - original version; cloned from JSON::XS
457